2013-08-15 1 views
4

при попытке написать тесты chefspec, следуя примерам на chefspec README (https://github.com/acrmp/chefspec), я получаю следующую ошибку. Я попытался добавить «зависит„chef_handler“» к моему metadata.rb, без успеха:Почему chefspec не может найти поваренную книгу chef_handler?

$ bundle exec rspec 
*[2013-08-15T11:55:01-07:00] WARN: found a directory cookbooks in the cookbook path, but it contains no cookbook files. skipping. 
F* 

Pending: 
    example::default should include 
    # Your recipe examples go here. 
    # ./spec/default_spec.rb:6 
    example::single_node should do something 
    # Your recipe examples go here. 
    # ./spec/single_node_spec.rb:5 

Failures: 

    1) example::default logs the foo attribute 
    Failure/Error: chef_run.converge 'example::default' 
    Chef::Exceptions::CookbookNotFound: 
     Cookbook chef_handler not found. If you're loading chef_handler from another cookbook, make sure you configure the dependency in your metadata 
    # ./spec/default_spec.rb:16:in `block (2 levels) in <top (required)>' 

ответ

1

Я столкнулся с той же проблемой в последнее время. Поскольку chefspec стремится быть быстрым и только имитирует работу шеф-повара, он не клонирует кулинарные книги с сервера шеф-повара. Это требует, чтобы поваренная книга chef_handler была локальной. По умолчанию он ищет его на том же уровне, что и кулинарная книга, которую вы тестируете.

например.

./test_cookbook 
./chef_handler 
8

У меня была та же проблема, пытаясь проверить пользовательский обработчик Chef, но я пытался использовать Berkshelf тянуть зависимостей вниз через встроенную поддержку ChefSpec для Berkshelf. Вот что работает для меня:

Добавить спецификации/spec_helper.rb с

require 'chefspec' 
require 'chefspec/berkshelf' 

Добавить .rspec файл в корневом каталоге проекта поваренной книги с

--color 
--format progress 
--require spec_helper 

Убедитесь, что ваш спецификации (спецификации /default_spec.rb) установлен правильно

describe 'my_chef_handlers::default' do 
    handler_path = File.join('files', 'default') 

    let(:chef_run) do 
    chef_runner = ChefSpec::Runner.new do |node| 
     node.set['chef_handler']['handler_path'] = handler_path 
     node.set['statsd']['server'] = '127.0.0.1' 
    end 
    chef_runner.converge 'my_chef_handlers::default' 
    end 

end 

Настройка бегун ChefSpec вне пусть заявление вызванная поваренная книга не обнаружила ошибок.

+0

+1 хотел +2 :) –

+0

Также спасибо! –