Chef infra 测试图书馆厨师烹饪书

Chef infra 测试图书馆厨师烹饪书,chef-infra,test-kitchen,chefspec,Chef Infra,Test Kitchen,Chefspec,小结:我怎样才能最好地测试一本来自另一本烹饪书的图书馆烹饪书 详细信息:我正在编写一本食谱,其中包含一个LWRP和一个最小的默认食谱,该食谱根据运行位置设置一些属性。然而,LWRP定义的新资源是从其他烹饪书中使用的 例如,库烹饪书在mylib/resources/example.rb和mylib/providers/example.rb中定义并实现了mylib_示例。例如,“客户端”烹饪书将在client/recipes/default.rb中使用它 如何从图书馆烹饪书本身测试资源使用情况?我对

小结:我怎样才能最好地测试一本来自另一本烹饪书的图书馆烹饪书

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

例如,库烹饪书在mylib/resources/example.rb和mylib/providers/example.rb中定义并实现了mylib_示例。例如,“客户端”烹饪书将在client/recipes/default.rb中使用它


如何从图书馆烹饪书本身测试资源使用情况?我对框架并不担心,因为它目前将与Test Kitchen和Chefspec一起到期。

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

对不起,我的英语!! 致以最诚挚的问候

测试包装器食谱 无论哪种情况,你都需要一本“测试”食谱来练习你的LWRP。通常是
mylwrp\u食谱/test/cookbooks
目录中的
test-mylwrp\u食谱
mylwrp\u食谱
。在我的测试食谱中,对于我的库食谱中的每个资源,我通常有一个食谱。然后在ChefSpec或TestKitchen中使用测试食谱。另外,请确保将
mylwrp_cookbook/test
目录添加到.chefignore文件中,这样您就不会对通过刀架/书架上传到厨师服务器的烹饪书感到厌烦

LWRP资源 是否使用chefspec或kitchen实际上取决于LWRP代码的工作方式。如果您的LWRP严格声明提供程序中的其他资源,并且希望使用
use\u inline\u resources
,那么我将使用ChefSpec。然而,如果您正在LWRP中进行系统调用,那么您确实需要使用TestKitchen。ChefSpec从不执行资源,因此当您测试一个比创建其他资源做得更多的库时,它就没有那么有用了

ChefSpec 如果你想知道我是如何实现它的,我就写了大部分规范测试。
请特别注意的使用,不要忘记包含一个matchers.rb文件,它将使chefspec测试对于使用您的库烹饪书的烹饪书更加容易

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

正如Psyreactor和你自己提到的,它似乎是一本matchers.rb是一种方法-我正在测试它,一旦我完全理解它的工作原理,我将接受答案。@FredClausen matchers不是测试你的图书馆食谱的好方法。它们被其他需要测试但包含LWRP的烹饪书所使用。使用ChefSpec,这些匹配器只会帮助您确定您的测试食谱从您的LWRP创建了一个资源,但它们不会确保您的LWRP实际执行它应该执行的操作。感谢@TejayCardon提供的信息。我仍然不确定如何着手测试图书馆的食谱。我是否需要以某种方式创建一个将资源实例化的临时包装器食谱?@FredClausen。通常,您会将其放入
myCookbook/test/cookbook/myCookbook-test
中,然后您的ChefSpec和/或厨房测试将使用该测试食谱。对于测试套件中的每个规范,测试食谱中通常有一个配方。别忘了将
test
目录添加到你的.chefignore文件中,这样你就不会在服务器上浪费你的烹饪书了。太棒了!这回答了我的问题。你介意在你的回答中加上这个,然后我就接受了吗?
include_recipe 'mylib'
mylib_example "widget1" do
    magic_number '42'
end