重要ポイント
全般
テストの記述は未来への責任
本当の効果は他人や、理解が薄れたときに感じる。最少は無駄に感じるかもしれないが我慢して書こう。
記述上の注意
一度に多くをテストしない
いろんなことをまとめてテストすると、こけた原因がわかりにくくなるので、一つずつテストする。
必要なテストを着実にする
Rspecはブラックボックステストではないので、実装から想定しうる挙動はテストする必要があるが、過剰なテストは不要
何をテストしているのか意識する
このテストケースはこういう不具合やデグレを考慮している。という意識を常に持ちながら書く。
バグを仕込んでみる
テストが一通りかけたら、わざとプロダクトコードにバグを仕込んでみよう。それでテストが失敗すればよいテスト。逆に、どうやってもコケさせられないテストは不要なテスト
- 値の代入先を間違える
- 条件判定が逆(ORとAND)
- ifの条件が違う
letとlet!やcreateとbuildの違いを意識して書く
- letは初めて変数が呼び出されたら動く。let!はすぐ動く。つまりデータの挙動が変わる。
- createはDBに登録してしまうので、SQLが流れる。buildは保存前。つまり、保存しなくてもテストできるものはbuildでやる。これは、テストが増えてきたときのパフォーマンスに影響する。
itをまとめるか、分けるか
まず、挙動の違いは以下の通り
- itの中に複数のexpectを書くと、失敗したら以降は実行されない。
- itを分ければすべて実行される。
この違いを理解して、あるものが扱けたら他が進んでも意味がないものはまとめる。個別に確認したほうがいいものは分けるとよい