如果我有一个具有以下属性的厨师菜谱
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测试?
谢谢你的帮助。
发布于 2014-11-09 05:21:57
expect(chef_run).to create_directory('/mnt/directory1')
expect(chef_run).to create_directory('/mnt/directory2')发布于 2014-11-10 15:14:11
你也可以
%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中的列表要更改,它不会破坏测试。它还允许您为测试目录使用完全虚拟的名称,我认为这是有益的。
https://stackoverflow.com/questions/26825154
复制相似问题