测试库厨师烹饪书

时间:2014-10-02 01:30:30

标签: chef test-kitchen chefspec

总结:如何从另一本食谱中最好地测试图书馆食谱?

详细信息:我正在编写一本包含LWRP和最小默认配方的食谱,该配方根据其运行位置设置一些属性。但是,LWRP定义的新资源意味着可以从其他烹饪书中使用。

因此,例如,库cookbook在mylib / resources / example.rb和mylib / providers / example.rb中定义并实现了 mylib_example 。 "客户"例如,cookbook将使用 client / recipes / default.rb 作为

include_recipe 'mylib'
mylib_example "widget1" do
    magic_number '42'
end

如何从库食谱本身测试该资源使用情况?我对框架感到不满意,目前正在使用Test Kitchen和Chefspec过期。

2 个答案:

答案 0 :(得分:2)

Test-Wrapper Cookbooks

在任何一种情况下,您都需要进行一次测试'练习你的LWRP的食谱。通常在test-mylwrp_cookbook目录中为mylwrp_cookbook-testmylwrp_cookbook/test/cookbooks。我的测试食谱中通常有一个食谱,用于我的图书馆食谱中的每个资源。然后,您可以在ChefSpec或TestKitchen中使用测试食谱。另外,请务必将mylwrp_cookbook/test目录添加到.chefignore文件中,这样就不会使用刀/ berkshelf上传到厨师服务器的食谱变得臃肿。

LWRP资源

您是否使用chefspec或厨房取决于您的LWRP代码的工作方式。如果您的LWRP严格声明提供程序中的其他资源 - 并希望使用use_inline_resources,那么我将使用ChefSpec。但是,如果您在LWRP中进行系统调用,那么您确实需要使用Test Kitchen。 ChefSpec从不执行资源,因此当您测试的库不仅仅是创建其他资源时,它不太有用。

ChefSpec

如果您想要一个我如何处理它的示例,我在Chef Pushit上写了大部分规范测试 请特别注意使用step_into,并且不要忘记包含matchers.rb matchers.rb文件将使使用您的图书馆食谱的烹饪书更容易进行chefspec测试。

测试厨房

你可以在同一本食谱中看到一些厨房测试。一般概念是相同的 - 在您的图书馆食谱中创建一个测试食谱。

答案 1 :(得分:0)

Chefspec允许测试LWRP,但您必须在/libraries/matchers.rb文件中定义资源。 在以下链接中,该链接描述了如何创建matchers.rb,并在chefspec上进行测试。

http://givens.io/2014/01/chefspec-custom-matchers-for-lwrps/

抱歉我的英文! 最诚挚的问候