LoginSignup
2
2

More than 5 years have passed since last update.

chefspecで例外をテストする

Last updated at Posted at 2013-05-14

cookbookを共通化したりlibrariesを使ってコンパクト化をしていますが、その関係でrecipe内で一定のエラー処理を書いてしまいたい事が増えました。

エラーを出力するのであれば、当然ながらそれをテストしたいということで、chefspecでの例外のテスト方法をまとめます。

chefspec_raise_error
describe 'chefspec sample' do
  let (:chef_run) do
    chef_run = ChefSpec::ChefRunner.new.converge 'expect::error'
  end
  it 'raise error' do
    stdout_org = $stdout.dup
    $stdout.reopen("/dev/null", "a")
    expect{ chef_run }.to raise_error
    $stdout.reopen stdout_org
  end
end

ポイントはexpect{ chef_run }をしてraise_errorで受けること。
raise_errorマッチャはProcインスタンスに対して有効なので、()ではなく{}にしなければなりません。

あとは実行したときにChef::Runnerがいろいろとメッセージを吐いてしまうので、それを捨てるために標準出力を捨てています。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2