2

摘要:我怎样才能最好地测试一本打算从另一本食谱中收录的图书馆食谱?

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

因此,例如,库说明书在 mylib/resources/example.rb 和 mylib/providers/example.rb 中定义并实现了 mylib_example 。例如,“客户端”食谱将使用client/recipes/default.rb中的它作为

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

如何从图书馆说明书本身测试资源使用情况?我不关心框架,目前正在与 Test Kitchen 和 Chefspec 到期。

4

2 回答 2

2

测试包装食谱

无论哪种情况,您都需要一本练习 LWRP 的“测试”食谱。通常那将是test-mylwrp_cookbookmylwrp_cookbook-testmylwrp_cookbook/test/cookbooks目录中。对于我的图书馆食谱中的每个资源,我通常在我的测试食谱中都有一个食谱。然后,您可以在 ChefSpec 或 TestKitchen 中使用测试食谱食谱。此外,请务必将mylwrp_cookbook/test目录添加到您的 .chefignore 文件中,这样您就不会膨胀通过刀/berkshelf 上传到您的厨师服务器的食谱。

LWRP 资源

你是使用 chefspec 还是 kitchen 真的取决于你的 LWRP 代码是如何工作的。如果您的 LWRP 严格声明提供程序内的其他资源 - 并希望使用use_inline_resources,那么我将使用 ChefSpec。但是,如果您在 LWRP 中进行系统调用,那么您确实需要使用 Test Kitchen。ChefSpec 从不执行资源,因此当您测试一个比创建其他资源更多的库时,它的用处不大。

厨师规格

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

测试厨房

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

于 2014-10-02T03:13:22.143 回答
0

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

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

对不起我的英语不好!!最好的祝福

于 2014-10-02T03:00:01.197 回答