Rspec Chefspec:override属性不';行不通

Rspec Chefspec:override属性不';行不通,rspec,chef-infra,chefspec,Rspec,Chef Infra,Chefspec,我正在尝试使用bundle exec rspec检查规范测试,以进行以下测试 require 'spec_helper' describe 'my_recipe::default' do windows_platforms = { windows: %w(2008R2 2012 2012R2 2016 2019) } windows_platforms.each do |platform, versions| versions.each do |version|

我正在尝试使用
bundle exec rspec
检查规范测试,以进行以下测试

require 'spec_helper'

describe 'my_recipe::default' do
  windows_platforms = {
    windows: %w(2008R2 2012 2012R2 2016 2019)
  }

  windows_platforms.each do |platform, versions|
    versions.each do |version|
      context "When all attributes are default, on #{platform} #{version}" do
        let(:chef_run) do
          runner = ChefSpec::ServerRunner.new(platform: platform.to_s, version: version) do |node|
            node.override['domain'] = 'mydomain.com'
          end
          runner.converge(described_recipe)
        end

        it 'converges successfully' do
          expect { chef_run }.to_not raise_error
        end
      end
    end
  end
end
下面是我的默认属性文件的示例:

default['wsus'] =
  case node['domain']
  when 'mydomain.com'
    "do something"
  else
    raise 'Domain cannot be determined.'
  end
据我所知,“mydomain.com”应该被指定为默认的['domain'],但事实似乎并非如此

下面是我得到的错误:

expected no Exception, got #<RuntimeError: Domain cannot be determined.> with backtrace:
不应出现异常,已通过回溯获得:
有人对测试为什么不采用覆盖属性有什么建议吗


p、 如果我讲不通,请原谅。这是我关于stackoverflow的第一篇文章:(

您的代码很好,它应该可以像预期的那样使用许多其他属性,但不是
。重点是-
是特殊的-它是Ohai(或者在Fauxhai的测试用例中)设置的自动属性并且它具有最大优先级,不能被
override
属性覆盖。要模拟自动属性,您需要
automatic

runner = ChefSpec::ServerRunner.new(platform: platform.to_s, version: version) do |node|
  node.automatic['domain'] = 'mydomain.com'
end

整个自动属性列表都可以在中找到。

您的代码很好,并且它应该与许多其他属性一样工作,但不是
。要点是-
是特殊的-它是Ohai(或者在Fauxhai的测试用例中)设置的自动属性并且它具有最大优先级,不能被
override
属性覆盖。要模拟自动属性,您需要
automatic

runner = ChefSpec::ServerRunner.new(platform: platform.to_s, version: version) do |node|
  node.automatic['domain'] = 'mydomain.com'
end
自动属性的整个列表在中提供