3

我正在对现有模块(不是我自己编写的)进行单元测试。我似乎无法将 params 类undef值覆盖为一个hash值。

params 类具有以下内容(仅摘录):

class myclass::params {
 splunk = undef,
 ...
}

主要课程(仅摘录):

class myclass(
  $splunk = $myclass::params::splunk,
  ...
) inherits ::myclass::params
{...}

以及以下配置类(仅摘录):

class mylcass::config inherits myclass{

  if  $myclass::splunk['install']['package_manage'] {
    file { "somefile.conf":
     ensure  => file,
     mode    => '0444',
     source  => 'puppet:///modules/myclass/splunk/somefile.conf',
}
   ...
  }
}

在 config_spec.rb 文件中,我有以下内容:

require 'spec_helper'
require 'shared_contexts'

describe 'myclass::splunk::config' do

  hiera = Hiera.new(:config => 'spec/fixtures/hiera/hiera.yaml')
  splunk = hiera.lookup('splunk',nil,nil)

  let(:params) do
    {
    }
  end

  it do
    is_expected.to contain_file('somefile.conf')
      .with(
        'ensure' => 'file',
        'mode'   => '0444',
        'source' => 'puppet:///modules/myclass/splunk/somefile.conf'
      )
  end

end

我将 hiera 查找splunk插入到 myclass_spec.rb 文件中,希望它会覆盖:

require 'spec_helper'
require 'shared_contexts'

describe 'myclass' do

  hiera = Hiera.new(:config => 'spec/fixtures/hiera/hiera.yaml')
  splunk = hiera.lookup('splunk',nil,nil)

let(:params) do
    {
      :splunk => splunk
      ...
    }

但我继续收到以下错误:

myclass::splunk is not a hash or array when accessing it

如何覆盖splunk变量?

4

2 回答 2

1

一个疯狂的猜测,但很可能您的问题将通过将其添加到您的来解决describe

let(:pre_condition) { "class { 'myclass': splunk => { install => { package_manage => true } } }" }

它将导致myclass::splunk参数被设置。

于 2017-09-26T12:44:43.653 回答
0

$::myclass::params::splunk是一个普通的类变量,不是类参数。Hiera 不参与分配其价值。您不能在 Puppet DSL 中更改或覆盖其分配的值,据我所知,在 rspec-puppet 中也不能。

如果您最终想要测试类参数的不同值$::myclass::splunk,那么您应该将该参数的值注入到您的 Hiera 数据中。您不需要测试 的不同值$::myclass::params::splunk,因为获得该变量不同值的唯一方法myclass::params是修改类的代码。

于 2015-12-04T15:41:13.970 回答