RSpec + RCov でテストしたい。

テストをね。したいのですよ。テストを。
Rubyもだいぶ慣れてきて古いコードとかリファクタリングしたくなるんだけど、再現性がちゃんと保ててるかイマイチ自信が持てないし。
でもテストって面倒で、なかなか習慣にならない。


と、いう事でテンションを上げるための要件

  • 色がキレイだとテンション上る
  • RSpecの-fsオプションとかステキ
  • RCovの出力とかテンション上る

あたりが満せればいいのかなぁと。

specをrcovにかける方法がわからん。。。

という事で、RSpec + RCov で要件は全て満せるわけですが、RSpecRCov を一緒に使う方法がよくわかんないっす。


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

なんとかして RSpecRCov を組み合わせられないかなぁ。。。
RSpec側からRCovを呼びだすのかなぁ。。。。RCov側からRSpecを呼びだすのかなぁ。。。


色々ヘルプとか見てみたけど、いまいちわからない。


でも、ひとつ気になる点が。。。

$ spec -h | grep -i cov
$ rcov | grep -i RSpec
        --spec-only                  Only trace code executed inside RSpec specs.

ん? RCovからRSpecはできるのか???


で、ふと思ってスペックファイルに

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%
27.2% 2 file(s) 1209 Lines 474 LOC

キター。
なんだ、できるじゃん。

あーでも unit/test の時と違ってテスト結果は標準出力には出ないのか。。。
テストは別に

$ spec -fs -c spec/hoge_spec.rb

とかすんのかな?

まぁとりあえず、これは許せるレベル。
と、思ったんだけど。。。。

HTMLのファイルを見ると全然ダメポー
ダメーポーダメーポーダメーポーダメーポー

しょぼんぬ。

rake使うしかないのかなぁ。。。