2010-11-19 00:15:10 +0900
RSpecで書いているスペック(テスト)がどうも冗長になっている気がして、いいテストのリファクタリング指針はないかなと探してみたところ、RSpecのベストプラクティスをまとめているページを2つほど見つけたのでまとめておく。
(My) RSpec best practices and tips | EggsOnBread
-
specify {}
やit {}
、subject {}
といったショートカット記法を使う -
context
を'when'や'with'で始めて、メソッドの説明には'#'を使う- エラーメッセージがわかりやすくなる
- メッセージをわかりやすいものにするためにRSpecマッチャーを使う
- 1つの
it
ブロックには1つのExpectationだけを記述する -
describe
とcontext
をふんだんに使う - 妥当な値、境界値、不正な値をテストする
-
My top 7 RSpec best practices | Dmytro Shteflyuk's Home
-
before :all
ブロックは注意して使う- テストデータを
before :all
ブロックで生成する際は、それらがトランザクションでラップされず、テスト後もデータのロールバックが行われないことに注意 -
after :all
ブロックでデータの削除を明示的に行う必要がある -
before :each
に書き換えれば実行毎にロールバックが行われるようになる
- テストデータを
- For each test create exactly what it needs
- プロジェクトが大きくなるとフィクスチャにフィールドを追加するたびにテストの大半が失敗するようになるので
factory_girl
などのライブラリを使う
- プロジェクトが大きくなるとフィクスチャにフィールドを追加するたびにテストの大半が失敗するようになるので
- 個々のスペックで数百レコードものデータを生成したりしない
- モックを造り過ぎない
-
context
を使う - Create several test suites to speed up your workflow
-
spec_helper
が何度もロードされないようにする(重複してロードされた際は警告を表示するようにする)
-
でも、テストコードのリファクタリングという観点でもっとも参考になったのはid:t-wadaさんの「RSpec の入門とその一歩先へ」シリーズ。
- RSpec の入門とその一歩先へ - t-wadaの日記
- RSpec の入門とその一歩先へ、第2イテレーション - t-wadaの日記
- RSpec の入門とその一歩先へ、第3イテレーション - t-wadaの日記
この内容ならEPUBやPDFで販売されてても買っちゃうなあ。