重要ポイント

全般

テストの記述は未来への責任

本当の効果は他人や、理解が薄れたときに感じる。最少は無駄に感じるかもしれないが我慢して書こう。

記述上の注意

一度に多くをテストしない

いろんなことをまとめてテストすると、こけた原因がわかりにくくなるので、一つずつテストする。

必要なテストを着実にする

Rspecはブラックボックステストではないので、実装から想定しうる挙動はテストする必要があるが、過剰なテストは不要

何をテストしているのか意識する

このテストケースはこういう不具合やデグレを考慮している。という意識を常に持ちながら書く。

バグを仕込んでみる

テストが一通りかけたら、わざとプロダクトコードにバグを仕込んでみよう。それでテストが失敗すればよいテスト。逆に、どうやってもコケさせられないテストは不要なテスト

  • 値の代入先を間違える
  • 条件判定が逆(ORとAND)
  • ifの条件が違う

letとlet!やcreateとbuildの違いを意識して書く

  • letは初めて変数が呼び出されたら動く。let!はすぐ動く。つまりデータの挙動が変わる。
  • createはDBに登録してしまうので、SQLが流れる。buildは保存前。つまり、保存しなくてもテストできるものはbuildでやる。これは、テストが増えてきたときのパフォーマンスに影響する。

itをまとめるか、分けるか

まず、挙動の違いは以下の通り

  • itの中に複数のexpectを書くと、失敗したら以降は実行されない。
  • itを分ければすべて実行される。

この違いを理解して、あるものが扱けたら他が進んでも意味がないものはまとめる。個別に確認したほうがいいものは分けるとよい