タイトルの通り、Rails で test-unit と simplecov を使おうとしてハマったので、他の方の参考のためにメモっておきます。
そもそも適当にググッて設定したのが問題だったのですが、test-unit を使おうと思って Gemfile と test_helpers.rb を編集してテストしたところ、元は 100% だった C0 カバレッジが妙なことに…
bundle exec rake test:helpers
Coverage report generated for Unit Tests to /Users/bsdmad/xxxxx/xxxx/coverage. 43 / 117 LOC (36.75%) covered.
Loaded suite /Users/bsdmad/.rbenv/versions/2.2.3/bin/rake
Started
.............
Finished in 1.22676 seconds.
---------------------------------------------------------------------
13 tests, 55 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
---------------------------------------------------------------------
10.60 tests/s, 44.83 assertions/s
なぜかテストが開始される前にレポートが生成されています。しかも C0 カバレッジが 36.75% とか、意味不明 (--;。
結局、更にググッて色々と見ていたところ、simplecov は順序が重要らしい事が分かりました。更に Gemfile の記述で :require => false というのは、gem としては必要だけど require は別途行うよ(ここでは require しないよ)という事もわかりました。
ということで Gemfile を以下のように修正しました。
Gemfile
group :development, :test do
(省略)
gem 'simplecov', :require => false
gem 'test-unit', :require => false
gem 'test-unit-rails', :require => false
gem 'test-unit-notify', :require => false
end
そして test_helper.rb の先頭を以下のようにします。
test_helper.rb
require 'simplecov'
require 'test/unit'
require 'test/unit/rails'
require 'test/unit/notify'
SimpleCov.start 'rails'
(省略)
この後、テストを実行したら正常にレポートが作成されました。
$ bundle exec rake test
Loaded suite /Users/bsdmad/.rbenv/versions/2.2.3/bin/rake
Started
.....................................................................
(省略)
............
Finished in 49.895481 seconds.
---------------------------------------------------------------------
612 tests, 2015 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
---------------------------------------------------------------------
12.27 tests/s, 40.38 assertions/s
Coverage report generated for Unit Tests to /Users/bsdmad/xxx/xxx/xxx/xxx/coverage. 2507 / 2556 LOC (98.08%) covered.
順序、重要ってことですね。