3

単体テストを既存のモジュール (自分で作成したものではない) に改造しています。undefparams クラスの値を値にオーバーライドできないようです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 ルックアップをsplunkmyclass_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::splunkmyclass::params

于 2015-12-04T15:41:13.970 に答える