【问题标题】:Testing library Chef cookbooks测试库厨师食谱
【发布时间】:2014-10-14 21:35:27
【问题描述】:

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

详细信息:我正在编写一本包含 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 到期。

【问题讨论】:

    标签: chef-infra test-kitchen chefspec


    【解决方案1】:

    测试包装手册

    在任何一种情况下,您都需要一本用于练习 LWRP 的“测试”食谱。通常是mylwrp_cookbook/test/cookbooks 目录中的test-mylwrp_cookbook 或mylwrp_cookbook-test。对于我的图书馆食谱中的每个资源,我通常在我的测试食谱中都有一个食谱。然后,您可以在 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 文件将使使用您的图书馆食谱的食谱更容易进行chefspec测试。

    测试厨房

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

    【讨论】:

    • 正如 Psyreactor 和您自己所提到的,似乎 matchers.rb 是要走的路——我正在测试这个,一旦我完全理解它是如何工作的,就会接受答案。
    • @FredClausen Matchers 不是测试图书馆食谱的好方法。它们被其他需要测试的食谱使用,但包含您的 LWRP。使用 ChefSpec,这些匹配器只会帮助您确定您的测试说明书从您的 LWRP 创建了一个资源,但它们不会确保您的 LWRP 确实在做它应该做的事情。
    • 感谢@TejayCardon 提供的信息。我仍然不确定如何测试图书馆食谱。我是否需要以某种方式创建一个将实例化资源的瞬态包装说明书?
    • @FredClausen 没错。通常,您会将其放入 myCookbook/test/cookbooks/myCookbook-test 您的 ChefSpec 和/或厨房测试将使用该测试食谱。通常,您的测试套件中的每个规范都有一个测试食谱中的配方。不要忘记将 test 目录添加到您的 .chefignore 文件中,这样您就不会在服务器上膨胀您的说明书。
    • 完美!这回答了我的问题。您介意将其添加到您的答案中,然后我会接受吗?
    【解决方案2】:

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

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

    对不起我的英语!! 最好的问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      相关资源
      最近更新 更多