Sooey

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だけを記述する
    • describecontextをふんだんに使う
    • 妥当な値、境界値、不正な値をテストする
  • 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 の入門とその一歩先へ」シリーズ。

この内容ならEPUBやPDFで販売されてても買っちゃうなあ。