4

我正在学习为我的 Chef 食谱编写集成测试。attributes是否可以从我的测试中的文件夹中引用变量?

这是我的测试,以确保httpdphp正确安装。但是,我还有其他要检查的包。

测试/烟雾/默认/install.rb

%w(httpd php).each do |rpm_package|
  describe package(rpm_package) do
    it { should be_installed }
  end
end

属性/default.rb

default['ic_apachephp']['php_packages'] = [
                              'php-mysqlnd',
                              'php-mbstring',
                              'php-gd',
                              'php-xml',
                              'php'
                            ]
4

1 回答 1

4

是的,这是可能的,但不是“直接”。Matt Wrock 在此博客条目中对其进行了描述。

必要的步骤是:

  • 添加包含具有以下内容的食谱(将节点属性转储到指定的 JSON 文件中)的食谱(例如export-node,以下称为test/fixtures/cookbooks/):

    ruby_block "Save node attributes" do
      block do
        IO.write("/tmp/kitchen_chef_node.json", node.to_json)
      end
    end
    
  • 将此配方添加到运行列表中.kitchen.yml

  • node使用在您的检查测试中加载对象

    node = json('/tmp/kitchen_chef_node.json').params
    

请注意,您必须手动选择正确的属性优先级(自动/默认/正常/覆盖),因为它们不会合并。

你也可以在这本食谱中找到我的一个例子:TYPO3-cookbooks/t3-pdns

编辑:我忘了告诉 Berkshelf 那本食谱的步骤。添加到您的Berksfile

group :integration do
  cookbook 'export-node', path: 'test/fixtures/cookbooks/export-node'
end
于 2017-08-04T16:08:02.657 回答