Ruby
Rails
SimpleCov
test-unit

Rails で test-unit + simplecov を使おうとしてハマった(解決済み)

More than 3 years have passed since last update.

タイトルの通り、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.

順序、重要ってことですね。