如何使用ChefSpec单独测试自定义厨师资源?

时间:2016-09-29 19:31:55

标签: chef chefspec

所以我试图创建一个可重用的自定义资源库。 This视频解释了如何做到这一点,但它没有解决单独测试资源的问题。

我知道你可以通过配方和融合测试资源,但我不想编写新的配方来测试我的资源。

我希望有一些方法可以使用属性执行自定义资源,而无需执行以下操作:

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 个答案:

答案 0 :(得分: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运行的小食谱。