Как вы тестируете пользовательский ресурс шеф-повара изолированно с ChefSpec?

Поэтому я пытаюсь создать библиотеку многоразовых пользовательских ресурсов. Это видео объясняет, как это сделать, но оно не касается тестирования ресурса в изоляции.

Я знаю, что вы можете протестировать ресурс с помощью рецепта и конвергенции, но я не хочу писать новый рецепт только для того, чтобы протестировать мой ресурс.

Я надеялся, что есть какой-то способ выполнить пользовательский ресурс со свойствами без необходимости делать что-то вроде ниже:

let(:chef_run) do
    runner = ChefSpec::ServerRunner.new
    runner.converge(described_recipe)
end 

Если бы вы могли просто сказать что-то вроде сказать

filename = 'myFile'    

it 'my resource should write to file' do
  execute_resouce(:some_resouce).with(filename)
  expect(::File).to receive(:write).with(filename)
end

это было бы действительно круто.

1 ответ

Это, к сожалению, довольно сложно. У меня есть решение, которое работает для меня, но оно еще не полностью очищено для публичного использования. Вы можете увидеть текущую очистку на https://github.com/poise/poise-spec и, возможно, подать некоторые идеи из моего стиля (например, https://github.com/poise/poise-service/blob/master/test/spec/resources/poise_service_user_spec.rb). В целом, самый простой способ сделать это - просто сделать поваренную книгу для тестового прибора под test/cookbook/ или подобный, и поместите в него кучу крошечных рецептов, которые вы можете указать ChefSpec для запуска.

Другие вопросы по тегам