環境
- Rails2
- RSpec 1.3.2(vendor/pluginsにいれた)
- RSpec-Rails 1.3.4(vendor/pluginsにいれた)
- Rcov 0.9.11
- ZenTest 4.0.0
特に新しいことをやってるわけでもなく、環境のバージョン自体は古いので新しい環境(特にRails3系の場合)を構築するのには
全く役に立たないのでまたそれは、構築の時に今回との差異を調べてすればいいかな
便利なことが実感できれば次回以降もなんとかして入れようと試みるわけで
RSpecが1系なのはRailsが2系な為ですが、ZenTestが古い理由はこのへんを見たのと、あと入れてみて動いたのでとりあえず4.0.0でっていう
設定等
実際にはscript/autospecで実行をしてる
これはautotestにRSpecを使うよ。とオプションを指定しているだけなので実際はautotestが実行されてる
autotestはZenTestに含まれてる
上記の環境入れてRails.rootでruby script/autospecを実行すれば後はファイルの変更があったら
自動的にspecを実行してくれる。とても便利
ちょっと、問題になったことがあって、あるカラムにユニークの制約をもたせているときに
FactoryGirlでデータを作っているとユニークチェックをパスできてなかった
rake specを実行すると通るので何だろうと思ったんだけど、autospecでspecを実行するときには
db:test:prepareが実行されていなくてテスト用DBが初期化されていないからカラムが残っていて制約にかかったよう
どうするの
autotestでは処理にフックしていろいろな処理を実行することができる
フックの種類に関しては下記サイトを参考にさせていただいた
テスト実行前にテストDBを初期化すればよさそうなので、フックの処理を~/.autotestに書く
.autotest
Autotest.add_hook :run_command do |at| system("rake db:test:prepare") next false end
なお、.autotestのサンプルは$GEM_HOME/gems/ZenTest-*.*.*/example_dot_autotest.rbに置いてあると思うけど
結構いろんなプラグインがあっていろいろ対応しているみたい
試しにrcovを実行するような設定をしてみる
.autotestに追記
require 'autotest/rcov' Autotest::RCov.command = 'spec:rcov'
RCov.commandを指定しないとrake rcovを実行するようだけど自分の環境ではそんなタスクなかったので
rake spec:rcovを実行するようにしてみた。テスト実行された後またテスト実行するのは少しアホだが
そのへんはrspec-railsに定義されてるspec:rcovとかをみながら.autotestに書けばいいのだろう
(毎度毎度rcovやってると重いので外しているのでやるかわかんないけど)