2

如果我有一个具有以下属性的厨师食谱

node.default["cookbook"]["directory"] = %w(/mnt/directory1 /mnt/directory2)

    node["cookbook"]["directory"].each do |dir|
      directory dir do
        owner "user"
        mode 0644"
        action :create
      end
    end

我将如何编写一个 chefspec 测试来处理基于属性创建的目录数组?

谢谢您的帮助。

4

2 回答 2

2

你也可以做

%w(/mnt/directory1 /mnt/directory2).each do |dir|
  expect(chef_run).to create_directory(dir)
end

更新:对不起,多一点经验,我现在可以给你一个更好的答案。

是的,上面的方法有效,但如果你真的想让它变得更好,那就这样做......

my_directories = %w(/test/1 /other_test/2)

let(chef_run) do
  ChefSpec::SoloRunner.new do |node|
    node.default["cookbook"]["directory"] = my_directories
  end.converge(described_recipe)
end

my_directories.each do |dir|
  expect(chef_run).to create_directory(dir)
end

这将允许您将目录列表和测试一起保存在一个文件中。如果您的列表attributes.rb要更改,它不会破坏测试。它还允许您对测试目录使用完全虚拟的名称,我觉得这很有用。

于 2014-11-10T15:14:11.573 回答
1
expect(chef_run).to create_directory('/mnt/directory1')
expect(chef_run).to create_directory('/mnt/directory2')
于 2014-11-09T05:21:57.560 回答