【问题标题】:ChefSpec - Unable to set node attributesChefSpec - 无法设置节点属性
【发布时间】:2014-02-14 03:13:54
【问题描述】:

我对 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>

我正在尝试按照in the docs 的描述设置节点属性,是否有明显的遗漏?

【问题讨论】:

    标签: chef-infra chefspec


    【解决方案1】:

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

    expect(chef_run).to create_directory("#{node['nginx']['dir']}")
    

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

    expect(chef_run).to create_directory('/etc/nginx')
    

    【讨论】:

    • 作者直销!谢谢,赛斯!
    • Seth,为什么这对我有用 expect(chef_run).to create_directory("#{Chef::Config[:file_cache_path]}/jdk/") 但是我的默认属性有问题。我希望包裹在 IF 周围的资源能够被执行,但事实并非如此。我的节点属性设置为 TRUE,但是在运行 RSpec 时,它失败了。真实测试(厨房测试)很好。