👌
RSpecのexpect の () と {} の違い
RSpecのexpectについて
expectはテスト対象を検証するためのメソッドです。
expect(実行結果).to eq 期待する結果
実行結果は期待結果と同じという意味です。
eqは「等しいこと」を意味する意味で***matcher(マッチャー)***のことです。
()と{}の使い方の違い
RSpecのexpectで()(カッコ)
と{}(中括弧、ブレース)
の違いは、
ブロック内のコードの評価方法に関連しています。
()(カッコ)を使用する場合:
()内を先に処理して、それをexpectに渡します
。
expect(A).to matcher
expectの引数として与えられたAが評価され、その評価結果がmatcherと照合されます。
()内のコードが最初に評価され、その結果がマッチャーに渡されます。
expect(10 + 5).to eq(15)
みたいな感じです。
{}を使用する場合:
expect { B }.to matcher
expectの中のBが評価されますが、expect内で適切なタイミングで実行されます。
expect { raise StandardError.new }.to raise_error(StandardError)
この形式は、ブロック内のコードがエラーを発生させるか、ある種の副作用を持つ場合に便利みたいです。
結論
()を使用すると、引数内の式がすぐに評価され
、{}を使用すると、ブロック内のコードはexpectブロック内で適切なタイミングで実行されます
。
選択肢はテストケースに合わせて使い分けていく必要があるみたいです。
資料
ChatGptにも質問してみました。
補足
2023年9月27日に投稿した記事を都合でこちらに投稿しました。
Discussion