2014-02-10 3 views
2

Я пытаюсь запустить тесты ChefSpec.Ошибка «Cookbook not found» с проверкой ChefSpec

Это мой ChefSpec тест:

require_relative '../spec_helper' 

describe 'my-demo::basesystem' do 

    let(:chef_run) { ChefSpec::Runner.new.converge(described_recipe)} 

    describe 'basesystem' do 

    it "should be installed" do 
     expect(chef_run).to install_package('build-essential') 
    end 
    end 
end 

И это мой рецепт

include_recipe 'build-essential::default' 

Это был вывод сообщения об ошибке, когда я выполнил мой ChefSpec тесты

================================================================================ 
Recipe Compile Error in /tmp/d20140208-11211-1tu0tmq/my-demo/recipes/basesystem.rb 
================================================================================ 

Chef::Exceptions::CookbookNotFound 
---------------------------------- 
Cookbook build-essential:: not found. If you're loading build-essential:: from another cookbook, make sure you configure the dependency in your metadata 

Cookbook Trace: 
--------------- 
    /tmp/d20140208-11211-1tu0tmq/build-essential/recipes/default.rb:21:in `from_file' 
    /tmp/d20140208-11211-1tu0tmq/my-demo/recipes/basesystem.rb:2:in `from_file' 

Relevant File Content: 
---------------------- 
/tmp/d20140208-11211-1tu0tmq/build-essential/recipes/default.rb: 

14: # distributed under the License is distributed on an "AS IS" BASIS, 
15: # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
16: # See the License for the specific language governing permissions and 
17: # limitations under the License. 
18: # 
19: 
20: begin 
21>> include_recipe "build-essential::#{node['platform_family']}" 
22: rescue Chef::Exceptions::RecipeNotFound 
23: Chef::Log.warn "A build-essential recipe does not exist for the platform_family: #{node['platform_family']}" 
24: end 
25: 


Chef::Exceptions::CookbookNotFound: Cookbook build-essential:: not found. If you're loading build-essential:: from another cookbook, make sure you configure the dependency in your metadata 
/tmp/d20140208-11211-1tu0tmq/build-essential/recipes/default.rb:21:in `from_file' 
/tmp/d20140208-11211-1tu0tmq/my-demo/recipes/basesystem.rb:2:in `from_file' 
./spec/recipes/base_system_spec.rb:5:in `block (2 levels) in <top (required)>' 
./spec/recipes/base_system_spec.rb:8:in `block (2 levels) in <top (required)>' 

1 example, 1 failure, 0 passed 

Finished in 0.062297226 seconds 

Process finished with exit code 1 

Я не знаю, в чем проблема, я думал, что Беркшельф может разрешить зависимости поваренных книг.

+0

Пожалуйста, ваши spec_helper а – sethvargo

ответ

6

Если вы посмотрите на StackTrace:

20: begin 
21>> include_recipe "build-essential::#{node['platform_family']}" 
22: rescue Chef::Exceptions::RecipeNotFound 
23: Chef::Log.warn "A build-essential recipe does not exist for the platform_family: #{node['platform_family']}" 
24: end 

Вы увидите в строке 21, что накопление существенно поваренной пытается загрузить рецепт, который соответствует платформе семейства текущего узла. Однако для ChefSpec эти данные не заданы, если вы специально не сообщите ChefSpec, какой узел выдавать. Другими словами, node['platform_family'] - nil, поэтому он пытается включить рецепт с именем build-essential::(nothing), и это неверно.

Чтобы исправить это, вы можете установить значение для platform_family:

let(chef_run) do 
    ChefSpec::Runner.new do |node| 
    node.automatic['platform_family'] = 'ubuntu' 
    end.converge(described_recipe) 
end 

или (предпочтительно), вы можете сказать ChefSpec олицетворять узел:

let(:chef_run) { ChefSpec::Runner.new(platform: 'ubuntu', version: '12.04').converge(described_recipe) } 
+0

Спасибо, как всегда, ваш ответ работает !!!!! – Robert