2014-02-13 2 views
5

У меня есть простой тест для Nginx поваренной книги:ChefSpec - Невозможно установить узел атрибуты

require 'spec_helper' 

describe 'my_cookbook::nginx' do 
    let(:chef_run) do 
    ChefSpec::Runner.new do |node| 
     node.set['nginx']['dir'] = '/etc/nginx' 
    end.converge(described_recipe) 
    end 

    it 'should create configuration directory' do 
    expect(chef_run).to create_directory("#{node['nginx']['dir']}") 
    end 

end 

Который неисправный:

Failures: 

    1) my_cookbook::nginx should create configuration directory 
    Failure/Error: expect(chef_run).to create_directory("#{node['nginx']['dir']}") 
    NameError: 
     undefined local variable or method `node' for #<RSpec::Core::ExampleGroup::Nested_1:0x00000007993570> 

Я пытаюсь установить узел атрибуты, как описано in the docs , есть ли что-то очевидное, что мне не хватает?

ответ

9

Вы можете установить атрибуты узлов. Если вы посмотрите на StackTrace, он жалуется на этой линии:

expect(chef_run).to create_directory("#{node['nginx']['dir']}") 

В частности, #{node['nginx']['dir']}. Здесь вы должны использовать статическое значение, иначе ваш тест бессмыслен. Измените его на:

expect(chef_run).to create_directory('/etc/nginx') 
+0

Непосредственно от автора! Спасибо, Сет! –

+0

Сет, то почему это работает для меня ** ожидать (chef_run) .то create_directory ("# {Chef :: Config [: file_cache_path]}/JDK /") ** Но у меня есть проблемы с моим по умолчанию атрибут. Я ожидаю, что ресурсы, которые обернуты вокруг IF, будут выполнены, но это не так. Атрибут my node установлен в TRUE, но при запуске RSpec он терпит неудачу. Настоящий тест (кухонный тест) в порядке. – Lukino

Смежные вопросы