RSpec + RCov でテストしたい。
テストをね。したいのですよ。テストを。
Rubyもだいぶ慣れてきて古いコードとかリファクタリングしたくなるんだけど、再現性がちゃんと保ててるかイマイチ自信が持てないし。
でもテストって面倒で、なかなか習慣にならない。
と、いう事でテンションを上げるための要件
あたりが満せればいいのかなぁと。
specをrcovにかける方法がわからん。。。
という事で、RSpec + RCov で要件は全て満せるわけですが、RSpec と RCov を一緒に使う方法がよくわかんないっす。
unit/test だと普通にテストスクリプト書いて
$ rcov test/hoge_test.rb
でいいんですけどね。
rspecだと
$ rcov spec/hoge_spec.rb ./spec/hoge_spec.rb:9: undefined method `describe' for main:Object (NoMethodError) from /usr/lib/ruby/gems/1.8/gems/rcov-0.9.6/bin/rcov:508:in `load' from /usr/lib/ruby/gems/1.8/gems/rcov-0.9.6/bin/rcov:508 from /usr/bin/rcov:19:in `load' from /usr/bin/rcov:19
とか、おこられちゃう。
もちろん
$ spec spec/hoge_spec.rb
は大丈夫
Rakeファイル書いてゴニョゴニョとかいう解もどこかでみたけど、なんかヤだ。そんな事しなくてもできるはず。
とりあえず unit/test + rcov で
$ rcov test/*_test.rb Loaded suite /usr/bin/rcov Started ............... Finished in 0.043226 seconds. 15 tests, 34 assertions, 0 failures, 0 errors
全く問題ないんすよ。
# gem install redgreen
してテストスクリプトに
require 'rubygems' require 'redgreen'
って書いてるので色もつくし。
しかしこれでは RSpec の -fs 相当が得られないのでテンションがMAXにならない
RSpec + RCov
なんとかして RSpec と RCov を組み合わせられないかなぁ。。。
RSpec側からRCovを呼びだすのかなぁ。。。。RCov側からRSpecを呼びだすのかなぁ。。。
色々ヘルプとか見てみたけど、いまいちわからない。
でも、ひとつ気になる点が。。。
$ spec -h | grep -i cov $ rcov | grep -i RSpec --spec-only Only trace code executed inside RSpec specs.
で、ふと思ってスペックファイルに
require 'rubygems' require 'spec'
って書いて
$ rcov spec/hoge_spec.rb
してみたら
お???? 通った???
$ rcov -T spec/hoge_spec.rb
File | Lines | LOC | COV |
hoge.rb | 1192 | 463 | 26.1% |
spec/hoge_spec.rb | 17 | 11 | 72.7% |
Total | 1209 | 474 | 27.2% |
キター。
なんだ、できるじゃん。
あーでも unit/test の時と違ってテスト結果は標準出力には出ないのか。。。
テストは別に
$ spec -fs -c spec/hoge_spec.rb
とかすんのかな?
まぁとりあえず、これは許せるレベル。
と、思ったんだけど。。。。
HTMLのファイルを見ると全然ダメポー
ダメーポーダメーポーダメーポーダメーポー
しょぼんぬ。
rake使うしかないのかなぁ。。。