RSpec
Overview
Rubyで使用する RSpec
についてまとめているセクション。
ユビキタス
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
を活用して冗長なコードを避ける。