7

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 を使用する必要がありますか?

4

1 に答える 1

16

JSON ロールを使用している場合は、以下を含める必要がありますjson_class

"json_class": "Chef::Role"

Ruby ロールを使用している場合は、その必要はありません。

于 2014-02-01T18:31:05.993 に答える