0
  • パペット 3 の使用
  • rspec-puppet を使用したテスト
  • 定義済みの型を使用してハッシュの配列を反復処理する
  • 配列またはハッシュではないため、パラメーター (デフォルトで $title の値) にアクセスできないというエラーが表示される

puppet モジュールで古いスタイルの繰り返しを使用して、ハッシュの配列を繰り返し処理する定義済みの型を作成しています。rspec-puppet でこの定義のテストを書き、 using にハッシュを割り当てようとし:titleていlet()ます。は、という$title変数に設定されるはずですが$daemon、テストでは、それ$daemonがハッシュでも配列でもないというエラーがスローされ続けます。

定義済みの型を作成する方法は次のとおりです。

define my_module::daemon_install ($daemon = $title) {

  package {"${daemon['package_name']}":
    ensure => "${daemon['package_version']}",
  }

  file {"${some_fact}/${daemon['binary']}.conf":
    ensure => file,
    content => "blah"
    notify => Service["${daemon['name']}"],
  }

  service {"${daemon['name']}":
    ensure => running,
    enable => true,
  }
}

そして、これが私がタイトルを設定しようとしている方法です:

describe 'my_module::daemon_install' do

  context 'with foo' do

    let(:title) {
      {
        "name" => "foo",
        "package_name" => "bar",
        "package_version" => "1.0.1",
        "binary" => "food",
      }
    }

    # ...

  end
end

そして、ここにエラーがあります:

daemon is not a hash or array when accessing it with package_version

私は実際には反復のために定義された型を使用することに少し慣れていません。

しかし、なぜそれは不平を言っているだけなpackage_versionpackage_nameですか?さらに重要なことは、スペックファイルで正しくハッシュに設定しているのに(私は信じている)、なぜハッシュではないのかということです。

この定義された型を使用するクラスの別のテストが正常に完了することを言及する必要があります。したがって、推測すると、定義を直接テストするときにタイトルを設定しようとしている方法に関連しているようです。

4

1 に答える 1

1

Rspec は常に に変換titleされStringます。

代わりに$nameinを使用し、以下をテストに追加します。define()$title

let :title do
  { ... }
end

let :params do
  { :name => title }
end

$nameと等しいことに注意してください$title

于 2016-03-10T08:47:02.080 に答える