有没有办法在使用 rspec 时使用自定义事实?我的模块运行良好,自定义事实存在,并且当我在代理上运行 puppet 时按预期工作,但是当我尝试在 rspec 中使用相同的事实时,我收到以下错误:
Failure/Error: it { should contain_class('zabbixconfig') }
Puppet::PreformattedError:
Evaluation Error: Unknown variable: 'pskkey_generate'. at /etc/puppetlabs/code/environments/production/modules/zabbixconfig/spec/fixtures/modules/zabbixconfig/manifests/init.pp:46:13 on node puppet-master-poc
上述错误中的pskkey_generate
是我的自定义事实,这里是包含它的我的课程的片段:
$pskkey = $pskkey_generate
有人知道如何让 rspec 识别我的自定义事实吗?如能得到任何帮助我将不胜感激。
答案1
您可以在文件中spec/spec_helper.rb
添加以下内容:
RSpec.configure do |c|
c.default_facts = { :pskkey_generate => '...' }
end
答案2
就你的情况而言,最好按照 bodgit 的建议,在 default_facts 中硬编码事实的已知值。在其他情况下,当事实来自第三方模块时,必须添加模拟才能对你对其代码的使用进行实际测试,这很烦人。
我已在我的顶部添加了spec/spec_helper.rb
:
if ENV.include? 'MODULEPATH'
top_path = File.dirname(File.dirname(__FILE__))
ENV['FACTERLIB'] = ENV['MODULEPATH'].split(/:/).map do |p|
p.start_with?('/') ? p : File.join(top_path, p)
end.map do |p|
Dir.glob(File.join(p, '*/lib/facter'))
end.flatten.join(':')
end
当 Facter 库加载时,它将尊重 FACTERLIB 环境变量并评估 Puppet 环境中的模块提供的所有自定义事实。
测试环境时,典型值MODULEPATH
是“design:modules”。