Edited at

chefspecで例外をテストする

More than 5 years have passed since last update.

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がいろいろとメッセージを吐いてしまうので、それを捨てるために標準出力を捨てています。