Search code examples
chef-infrachefspec

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?


Solution

  • 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')