如何解决在规格测试中插入chef_environment变量
在我的规格测试中,staff_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
解决方法
当您尝试访问Hash嵌套属性,但没有您要查找的父属性时,通常会出现此错误。
在您的情况下,您对凭据数据包进行存根处理并返回哈希值:
{
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'
}
}
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。