RSpecを書いているうちに、「これとよく似た比較書いたけどどのプロダクトのどのSpecだっけ?」って探して時間を取られた事があったので、ここに記事としてまとめておきます。未来の自分と他の開発者の方に役立つ事を願って。
エラーログが出力されている事を確認。
it 'エラーログが出力される事' do
expect(Rails.logger).to receive(:error).with(/code: 400/)
# 以下、テストしたい処理を書く
end
ポイントとしては
- expectをitの一番最初に書く。こうしないとログの出力メソッドがreceiveによって捕捉されません。
-
with
の中に、含まれていてほしいメッセージを書く。そのまま書くと完全一致にならないとパスしないので、スラッシュで囲むことで、特定のメッセージを含んでいた場合のケースを書くことができます。いわゆる正規表現。
エラーログが出力されていない事を確認。
it 'エラーログが出力されない事' do
expect(Rails.logger).to receive(:error).exactly(0).times
# 以下、テストしたい処理を書く
end
先程の例の応用で、「正常に処理が完了するケースの場合はエラーログが出ないはずだ。」も調べたかった。
receive
メソッドにつなぐ形で回数を指定できるので、.exactly(0).times
でメソッドが呼ばれていない事を確かめました。
参考にしたサイト
よくRubyやRailsを書く人からしてみれば「当たり前じゃねぇか!」って言われるかもしれませんが、私がここ最近初めて本格的にRailsを使った開発にアサインされて、戸惑いながらも開発していた時に得たものなので、優しい目で見ていただけますと幸いでございます。
使えそうなものが出てきたら追記していこうと思います。
ありがとうございました。