ChefSpec - 无法设置节点属性

ben*_*ier 6 chef-infra chefspec

我有一个简单的测试nginx食谱:

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
Run Code Online (Sandbox Code Playgroud)

哪个失败了:

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>
Run Code Online (Sandbox Code Playgroud)

我正在尝试按照文档中的描述设置节点属性,是否有一些明显我缺少的东西?

set*_*rgo 10

您可以设置节点属性.如果你看看堆栈跟踪,它会抱怨这一行:

expect(chef_run).to create_directory("#{node['nginx']['dir']}")
Run Code Online (Sandbox Code Playgroud)

具体来说,#{node['nginx']['dir']}.你应该在这里使用静态值,否则你的测试毫无意义.将其更改为:

expect(chef_run).to create_directory('/etc/nginx')
Run Code Online (Sandbox Code Playgroud)