Chef infra ChefSpec-无法设置节点属性

Chef infra ChefSpec-无法设置节点属性,chef-infra,chefspec,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 configurati

我对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
这是失败的:

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>
故障:
1) my_cookbook::nginx应该创建配置目录
失败/错误:预期(chef_run)。要创建_目录(“#{node['nginx']['dir']}”)
名称错误:
未定义的局部变量或方法“node”#

我正在尝试按所述设置节点属性,是否有明显的遗漏?

您可以设置节点属性。如果您查看stacktrace,它会抱怨这一行:

expect(chef_run)。创建_目录(“#{node['nginx']['dir']}”)
具体来说,
#{node['nginx']['dir']}
。您应该在这里使用静态值,否则您的测试将毫无意义。将其更改为:

expect(chef_run)。创建_目录('/etc/nginx'))

直接来自作者!谢谢你,赛斯!Seth,为什么这对我有效呢?除了(chef_run)。创建_目录(“#{chef::Config[:file_cache_path]}/jdk/”),但我的默认属性有问题。我希望围绕IF的资源能够被执行,但它们不是。“我的节点”属性设置为TRUE,但在运行RSpec时失败。真正的测试(厨房测试)是好的。