RSpec
Overview
Rubyで使用する RSpec についてまとめているセクション。
tip
テストは「実装」ではなく「振る舞い(=ユースケース)」に基づいて書くのが理想的。
特に RSpec のような BDD(Behavior-Driven Development)スタイルのフレームワークでは、「このフォームはどう振る舞うべきか?」を自然言語的に表現するのが本来の姿。
describe
テスト対象のクラスやメソッドの振る舞いをまとめた「説明」ブロック。機能やクラス単位でテストをグループ化します。
context
特定の状態や条件を表すためのブロック。たとえば、「ログインしている場合」と「していない場合」など、異なる条件ごとにテストケースをグループ化します。
it
テストケースを表現するブロック。具体的な動作をテストするために使います。it の中に期待する動作を表現します。
let
遅延評価される変数を定義し、必要なときに初めて評価されることを保証します。let はテストの繰り返しのたびに呼び出される。
before / after
各テストの前後で特定の処理を実行するためのフック。たとえば、データベースのセットアップやクリーンアップ、認証などの事前・事後処理を行います。
shared_examples / it_behaves_like
複数のテストで同じ振る舞いをテストするための仕組み。DRYなテストを書くために利用される。
RSpecでよく使われるパターン
テストケースのグループ化(describeとcontextの使い分け)
テストのフロー制御(before, after, around)
テストの前後処理をどのタイミングで行うか、どう設計すればメンテナンスしやすくなるか。
Best Practices
- テストは一つの期待にフォーカスする
- 各
itブロックは1つの期待される動作に集中し、他の動作は別のitに分ける。
- 各
- DRYなテストを書く
letやshared_examplesを活用して冗長なコードを避ける。