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

これにより、ディレクトリのリストとテストを 1 つのファイルにまとめることができます。あなたのリストattributes.rbが変更されたとしても、テストが中断されることはありません。また、テスト ディレクトリに完全にダミーの名前を使用することもできます。これは有益だと思います。

于 2014-11-10T15:14:11.573 に答える