在规范测试中存根 chef_environment 变量
Stubbing chef_environment variable in spec tests
在我的规范测试中 chef_env 变量出现问题。部分食谱:
recipe.rb
example_credentials = data_bag_item(:credentials, 'example')
template '/etc/nginx/sites-available/example.conf' do
source 'http/example.conf.erb'
owner 'root'
group 'root'
mode '0644'
variables({
authorization: Base64.strict_encode64(example_credentials[node.chef_environment]['example_auth']),
cluster_id: node['project']['http']['example']['cluster_id']
})
end
测试一下:
test.rb
require 'spec_helper'
describe 'project::http' do
let(:chef_run) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '16.04') do |node|
env = Chef::Environment.new
env.name 'test'
expect(node).to receive(:chef_environment).and_return env.name
expect(Chef::Environment).to receive(:load).and_return env
end.converge(described_recipe)
end
before(:each) do
stub_data_bag_item(:credentials, 'example').and_return(example_auth: 'test_value')
end
end
但是我仍然遇到错误。
expected no Exception, got #<NoMethodError: undefined method `[]' for nil:NilClass> with backtrace
当您尝试访问您的哈希嵌套属性,但没有您正在寻找的父属性时,经常会出现此错误。
在你的例子中,你存根凭证数据包并且它returns一个散列:
{
example_auth: 'test_value'
}
然后在这一行:
authorization: Base64.strict_encode64(example_credentials[node.chef_environment]['example_auth']),
您正在尝试访问哈希的“测试”键 (= node.chef_environment),但它不存在。你需要改变你存根的数据包,所以它也有“测试”键。
stub_data_bag_item(:credentials, 'example').and_return(
{
'test' => {
'example_auth' => 'test_value'
}
}
)
在我的规范测试中 chef_env 变量出现问题。部分食谱:
recipe.rb
example_credentials = data_bag_item(:credentials, 'example')
template '/etc/nginx/sites-available/example.conf' do
source 'http/example.conf.erb'
owner 'root'
group 'root'
mode '0644'
variables({
authorization: Base64.strict_encode64(example_credentials[node.chef_environment]['example_auth']),
cluster_id: node['project']['http']['example']['cluster_id']
})
end
测试一下:
test.rb
require 'spec_helper'
describe 'project::http' do
let(:chef_run) do
ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '16.04') do |node|
env = Chef::Environment.new
env.name 'test'
expect(node).to receive(:chef_environment).and_return env.name
expect(Chef::Environment).to receive(:load).and_return env
end.converge(described_recipe)
end
before(:each) do
stub_data_bag_item(:credentials, 'example').and_return(example_auth: 'test_value')
end
end
但是我仍然遇到错误。
expected no Exception, got #<NoMethodError: undefined method `[]' for nil:NilClass> with backtrace
当您尝试访问您的哈希嵌套属性,但没有您正在寻找的父属性时,经常会出现此错误。
在你的例子中,你存根凭证数据包并且它returns一个散列:
{
example_auth: 'test_value'
}
然后在这一行:
authorization: Base64.strict_encode64(example_credentials[node.chef_environment]['example_auth']),
您正在尝试访问哈希的“测试”键 (= node.chef_environment),但它不存在。你需要改变你存根的数据包,所以它也有“测试”键。
stub_data_bag_item(:credentials, 'example').and_return(
{
'test' => {
'example_auth' => 'test_value'
}
}
)