3

クックブックで、Rds::Checks クラスを定義しました。このクラスは、bash/execute リソースと Guard 用の UNIX コマンドを構築するためのメソッドを共有します。libraries/checks.rb ファイルのサンプルは次のとおりです。

module Rds
 class Checks
   class << self

     def ssh_config_entry_present host, config_file, key_name
       "cat #{config_file} | grep #{key_name}"   
     end

     def redmine_migrated user, pass, name
       "if [ `mysql -u#{user} -p#{pass} -e 'select count(id) FROM #{name}.users;' | sed -n '2 p'` -gt 0 ]; then echo '0'; else echo '1'; fi"
     end

   end
 end
end 

LWPR プロバイダー、レシピ、chefspec テストでは、ファイルは問題なくロードされますが、serverspec 内で使用するとkitchen verifyエラーが発生します。

paolo@tower:~/cookbooks/rds$ cat test/integration/install/serverspec/localhost/install_spec.rb
...
    it 'do migrations' do
      cmd = Rds::Checks.redmine_migrated 
      expect(command(cmd).stdout).to eq 0
    end
...


paolo@tower:~/cookbooks/rds$ kitchen verify

...

    NameError:
      uninitialized constant Rds

bash/sh コマンドを共通のレイヤーでビルドするメソッドを保持して、個別にテストできるようにし、単体テストと統合テストでそれらを気にしないようにしたいと本当に思っています。

4

1 に答える 1

2

非常に手動でロードする必要があります。おそらく、クックブック データを保持する一時フォルダーをロード パスに追加します/tmp/kitchen/cookbooks。正しいフォルダーを追加してlibraries/から、通常どおりに必要とします。test-kitchen は Chef 以外のもので使用できるため、全体として、収束フェーズと検証フェーズは互いに何の関係もありません。

Chef コンバージ コンテキストでテストを実行するminitest ハンドラーや、同様のことを行う監査モードの提案のようなものを見たいと思うかもしれません。

それらの 1 つのようなものを使用して、クックブック自体にテストを記述します。つまり、converge は実際にはノードの収束とテストの実行の両方であり、verify は何もしないか、追加の外部テストを実行します。

于 2014-11-28T00:08:27.377 に答える