Я пытаюсь проверить роль с помощью ChefSpec. Я бы предпочел не использовать Chef Zero (требуя «chefspec/server») только потому, что он работает немного медленнее, чем ChefSpec делает сам по себе.NoMethodError: undefined method `run_list_for 'при тестировании роли с помощью ChefSpec
Возможно, я неправильно читаю документацию, но это не похоже на то, что шеф-повар необходим для проверки роли. Однако мне не повезло с моей текущей конфигурацией. Это мой тест:
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
Роль (находится в роли/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?
Метод 'run_list_for' не отображается в ChefSpec или Chef Zero. Могу ли я увидеть ваш метод? – sethvargo
'run_list_for' (если это то, о чем вы ссылаетесь) не является моим собственным методом, похоже, это связано с шеф-поваром. Трассировка стека генерируется в строке 'expect (chef_run)', и сам рецепт по умолчанию пуст. Единственные ссылки, которые я мог найти, - это некоторые сообщения, связанные со старыми версиями chef solo (версия 10), которые извергали это же исключение, когда JSON не содержал конкретных значений атрибутов (например, «json_class»: «Chef :: Role»). Я добавил содержимое JSON, дайте мне знать, если есть что-нибудь еще, что я могу опубликовать, что может быть полезно. – user949286
Какая версия ChefSpec? – sethvargo