2014-02-13 16 views
5

ich einen einfachen Test für die nginx Kochbuch haben:ChefSpec - Unable Knoten setzen Attribute

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 

Welche versagt:

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> 

Ich bin versucht, den Knoten zu setzen Attribute beschrieben als in the docs Gibt es etwas Offensichtliches, das ich vermisse?

Antwort

9

Sie können Knotenattribute festlegen. Wenn man sich die Stacktrace aussehen, es beschwert sich darüber:

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

Insbesondere #{node['nginx']['dir']}. Sie sollten hier einen statischen Wert verwenden, ansonsten ist Ihr Test sinnlos. Ändern Sie es in:

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

Direkt vom Autor! Danke, Seth! –

+0

Seth, warum dann ist das für mich arbeitet ** erwarten (chef_run) .to create_directory ("# {Chef :: Config [: file_cache_path]}/jdk /") ** Aber ich habe ein Problem mit meinem Standard Attribut. Ich erwarte, dass Ressourcen, die um IF gewickelt sind, ausgeführt werden, aber nicht. Mein Knotenattribut ist auf TRUE gesetzt, aber beim Ausführen von RSpec schlägt es fehl. Echter Test (Küchentest) ist in Ordnung. – Lukino