第3章 モデルスペック
この章の主な流れ
- バリデーションをテストする。
- インスタンスメソッドをテストする。
- クラスメソッドとスコープをテストする。
テストを書く上でのポイント
- 期待する結果は能動形で明示的に記述すること。
- 起きてほしいことと、起きてほしくないことをテストすること。
- 境界値テストをすること。
- 可読性を上げるためにスペックを整理すること。
学び(みなさんの意見もお聞きしたい)
- pending機能って便利!
- 誤判定ではないことを証明する方法
- FactoryBotを使わずにテストデータ作成する方法
分からなかったこと(みなさんからもあれば)
・ページ:53
セットアップの処理を各テストから before ブロックに移動したので、各 ユーザーはインスタンス変数にアサインする必要があります。そうしないとテストの中で変数名を指定してデータにアクセスできないからです。
→before ブロックの中ではインスタンス変数(@hoge)を使う
before(:all) vs before(:each)
|
テスト実行後のデータ |
呼び出されるタイミング |
備考 |
before(:all) |
消えない |
最初の it のみ |
|
before(:each) |
消える |
it 毎に呼び出される |
each は省略できる |
before(:all)のメリット
-
呼び出しが一回だけなのでテストの処理が高速になる
-
デメリット
- データが重複してしまうため各テスト独立したテストができない
- テストが終了しても作成されたデーターが残ってしまうため次回以降のテストに影響が出る
・表示言語に依存しないテスト
テキストでは上記のようにエラーメッセージを英語で記述していますが、表示言語に依存しているので、言語を切り替えるとテストが失敗します。
以下のような記述にすると言語に左右されないので便利です。
参考リンク
議題
1.テストファーストで書いてますか?
2.スコープって使ってますか?