ChefSpecでロールをテストしようとしています。私は、ChefSpec が単独で実行するよりも少し遅いという理由だけで、('chefspec/server' を要求することにより) Chef Zeroを使用したくありません。
ドキュメントの読み方が間違っているのかもしれませんが、役割をテストするために Chef Zero が必要なようには見えません。ただし、現在の構成ではうまくいきませんでした。これは私のテストです:
require 'chefspec'
RSpec.configure do |config|
config.cookbook_path = 'C:\projects\chef\cookbooks'
config.role_path = 'C:\projects\chef\roles'
config.log_level = :debug
config.platform = 'ubuntu'
config.version = '12.04'
end
describe 'my_cookbook::default' do
let(:chef_run) do
ChefSpec::Runner.new.converge('role[my_role]')
end
it 'runs without failing' do
expect(chef_run)
end
end
ロール (roles/my_role.json にあります):
{
"name": "my_role",
"description": "My role",
"default_attributes": {
},
"run_list": [
"recipe[my_cookbook::default]"
]
}
テストを実行すると、次のメッセージが表示されます。
NoMethodError: undefined method `run_list_for' for #<Hash:0x4fa3280>
./spec/role_spec.rb:13:in `block (2 levels) in <top (required)>'
./spec/role_spec.rb:17:in `block (2 levels) in <top (required)>'
テストを変更して、必要に応じて手動でロールを Chef Zero にロードするとchefspec/server
、うまくいくようです。ドキュメントの記述方法からサーバーをモックする必要はないと思いますが、間違っている可能性があります。
私は何か間違ったことをしていますか?これはバグですか?または、Chef Zero を使用する必要がありますか?