ChefSpec - Unable to set node attributes

chef-infra, chefspec

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

Problem

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?

Original source