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