Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ChefSpec - Unable to set node attributes

I have a simple test for the nginx cookbook:

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

Which is failing:

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>

I'm attempting to set the node attributes as described in the docs, is there something obvious I'm missing?

like image 650
ben lemasurier Avatar asked Feb 13 '14 18:02

ben lemasurier


1 Answers

You are able to set node attributes. If you look at the stacktrace, it's complaining about this line:

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

Specifically, #{node['nginx']['dir']}. You should use a static value here, otherwise your test is pointless. Change it to:

expect(chef_run).to create_directory('/etc/nginx')
like image 88
sethvargo Avatar answered Sep 28 '22 04:09

sethvargo