4日目/10日RoR

10日でおぼえる Ruby on Rails入門教室

10日でおぼえる Ruby on Rails入門教室

4日目はテストのやりかた。テストを書いて失敗するのを確認したら実装に取り掛かる。を繰り返す。品質のためのテストではなく、開発のためのテスト。

準備

test用データベースを作る。環境変数RAILS_ENVにtestをセットしてマイグレーション実行するだけ。

$rake RAILS_ENV=test <DB作成するマイグレーション>

以降は、development用のDBをマイグレーションしていくと、テスト実行時にtest用のDBもマイグレーションされるようになる。

テストの実行

引数なしのrakeを実行すると、テストも実行される。ルートのRakefileにtest/testtaskが組み込まれている。

テストデータ

フィクスチャーファイル(/test/fixture/.yml)に用意する。rubyの式を埋め込める。

ユニットテスト

モデルに対するテスト。

  • ヴァリデーション
  • DBからモデルオブジェクトをフェッチしてくるメソッドとか

が、テストの対象。実行時はrakeの引数に定義済みテスト用タスクを渡す。

$rake test:units

全てのユニットテストを実行する。ファンクショナルテストの場合は、test:functionals

ファンクショナルテスト

コントローラのアクションに対するテスト。アクションとテストメソッドが対になる感じ。
検証する対象はレスポンスなのでビューもいじる。レスポンスのテストってどうやるの? と思ったんだけど、CSSセレクタでDOMノードを指定して、アンカーの数が合ってるか、というようなテストをする。
あと、ビューをいじってロジックが入りこむ場合、ヘルパーメソッドとして切り出すのを紹介してた。(jsp/Servletだとタグを作る必要があって、作業量をrailsと比較すると結構面倒くさいよなーというのを思い出した。rails便利。)