rcov

rcov 試し中。

インストール:

$ sudo gem install rcov

RAILS_ROOT で、

$ rcov test/**/*_test.rb

RAILS_ROOT/coverage/ に結果の HTML 群が吐かれる。


けど、Rails 本体(ActiveRecordとか)もテスト吐かれて、ちょー大量のファイルが生成されるんですけど! --rails オプションつけてみてもダメ。


rails_rcov プラグインなら大丈夫かな?と試し中。・・・ダメだった。


ちょー遅いんですけど。週一実行とかになるのかなぁ・・・


できた。-x オプションで、/var/lib/gems を対象から外せば ok だった。

$ rcov -x /var/lib/gems --rails test/**/*_test.rb

Debian の人で RubyGems を apt で入れてる人は注意!


これで毎日実行できるぞ!


テキストでも吐けるけど、HTMLのが見やすいので、--no-html はつけない。
colinux で開発してるので、

$ ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => 'coverage'); trap('INT'){ s.shutdown }; s.start"

って感じで、ウェブサーバを立ち上げて閲覧。
めんどいので script/rcov-server 作った。

#!/usr/bin/env ruby
require "webrick"

__DIR__ = File.dirname(__FILE__)
s = WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => "#{__DIR__}/../coverage")
trap('INT'){ s.shutdown }
s.start

http://colinux:8000/ とかでアクセス。


rails_rcov プラグインは rake の引数が気に入らないのと、本家の例は、units/functional/integration でバラバラに index.html が作られたり、test/ 以下に生成されたりして気持ち悪いので、自前で lib/tasks/rcov.rake 作った。

namespace :test do
  namespace :coverage do
    desc "Delete coverage files"
    task :clean do
      rm_rf "coverage"
    end
  end
  desc "Generage coverage files"
  task :coverage => "test:coverage:clean" do
    sh "rcov -x /var/lib/gems --rails test/**/*_test.rb"
  end
end
$ rake test:coverage
$ rake test:coverage:clean

の2つ。