Как вы тестируете пользовательский ресурс шеф-повара изолированно с 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 для запуска.