如何在rspec-puppet中覆盖hiera_data?

时间:2015-03-03 14:05:09

标签: rspec tdd puppet hiera rspec-puppet

假设我有以下测试:

context 'test' do
  let(:hiera_data) { { :number => '2' } }

  it { should have_module__define_resource_count(2) }
end

context 'test2' do
  let(:hiera_data) { { :number => '10' } }

  it { should have_module__define_resource_count(10) }
end

第一个测试通过,但是当第二个测试运行时,它失败了,因为hiera变量number仍然是2。

似乎let(:hiera_data)无法覆盖先前声明的变量。

根据this readme,如果hiera数据设置在不同的文件中,它应该有效,但它不起作用。

如何在一个specfile中多次测试hiera?

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,并且被困了一段时间。最终我发现了hiera的信息。您可以像这样修复它:

let(:facts) {{ :cache_bust => Time.now }}

例如:

Puppet代码:

class example::bar {
  notify { 'bar': message => hiera('bar_message') }
}

rspec-puppet代码:

describe "example::bar" do

  let(:facts) {{ :cache_bust => Time.now }}

  describe "first in-line hiera_data test with a" do
    let(:hiera_data) { { :bar_message => "a" } }
    it { should contain_notify("bar").with_message("a") }
  end

  describe "second in-line hiera_data test with b" do
    let(:hiera_data) { { :bar_message => "b" } }
    it { should contain_notify("bar").with_message("b") }
  end
end

这个有效! I have a PR to add it to the docs. botfish fork是最近维护的hiera-puppet-helper分支(see the note on the original