我正在尝试使用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”应分配为default ['domain'],但似乎并非如此。
这是我得到的错误:
expected no Exception, got #<RuntimeError: Domain cannot be determined.> with backtrace:
有人建议为什么测试不采用覆盖属性吗?
p.s。如果我没有道理,请原谅。这是我关于stackoverflow的第一篇文章:(
答案 0 :(得分:0)
您的代码很好,并且可以与其他许多属性一起正常工作,但domain
却没有。点是-domain
是特殊-它是Ohai(或在测试用例中是Fauxhai)设置的自动属性,并且具有最高优先级,不能被override
属性覆盖。要模拟自动属性,您需要使用automatic
键。
runner = ChefSpec::ServerRunner.new(platform: platform.to_s, version: version) do |node|
node.automatic['domain'] = 'mydomain.com'
end
Chef docs on Ohai中提供了自动属性的完整列表。