RSpec: expectation not met
RSpecでエクスペクテーションが満たされなかった場合のエラー
概要
RSpecでエクスペクテーション(expect)が期待した結果と一致しなかった場合に発生するエラーです。
エラーメッセージ
Failure/Error: expect(result).to eq(5)
expected: 5
got: 4
(compared using ==)
または
Failure/Error: expect(service).to have_received(:send_email).once
expected: 1 time with any arguments
received: 0 times with any arguments
原因
- 値の不一致: 期待値と実際の値が異なる
- モックの設定ミス: スタブやモックが正しく設定されていない
- 非同期処理: 処理完了前にアサーション
- コンテキスト: テスト間で状態が共有されている
解決策
1. 基本的なマッチャー
| |
2. モックとスタブ
| |
3. 呼び出し回数の検証
| |
4. 引数のマッチング
| |
5. 例外のテスト
| |
6. 変化のテスト
| |
7. 共有コンテキスト
| |
8. 共有サンプル
| |
9. before/after フック
| |
10. 非同期テスト
| |
よくある間違い
expectとtoの間にドットを忘れるletで定義した値がメモ化されることを忘れる(let!で即時評価)allowとexpect(...).to have_receivedの順序instance_doubleで存在しないメソッドをスタブしようとする
この記事は役に立ちましたか?