環境
Ruby 2.0
Rails 4.0
simplecov 0.9.2
またテストはRSpecを使用
状況
Gemfileとspec_helper.rbは以下のように設定
group :test do
# 以下追記
gem 'simplecov', require: false
end
# 以下追記
require 'simplecov'
SimpleCov.start 'rails'
RSpecの実行
$ bundle exec spring rspec spec
カバレッジのレポートはcoverage/index.html
を開くと確認可能ですが、
見てみると全ての項目が100%に、つまりレポートが1つも出力されていませんでした。
対処法
最初にSimpleCov.startを実行する
SimpleCov.start
の記述位置が問題となっている場合があります。
これはspec_helper.rb
内の先頭に記述される必要があります。
ダメな例
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'helpers'
# ...略
require 'simplecov'
# 適当な位置で実行
SimpleCov.start 'rails'
RSpec.configure do |config|
# ...略
end
良い例
# 先頭に配置
require 'simplecov'
SimpleCov.start 'rails'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'helpers'
# ...略
RSpec.configure do |config|
# ...略
end
より具体的には、require File.expand_path("../../config/environment", __FILE__)
より先にSimleCov.start
を持ってくる必要があるらしいです。
springを使用しない
rspec実行時にspring
を使っていると正常に動作しません。
詳細は不明ですがspringとsimplecovは相性が良くないらしので、実行する際は
$ bundle exec rspec spec
で実行します。
まとめ
simplecovのissues見ると「レポートが出力されない」という事例がいくつかあるみたいなので、
今回紹介した方法でなおらなければissuesを漁ってみるといいかもしれません。
参考
Always 100% test coverage with Ruby 2.0p353 and Rails 4.1beta · Issue #271 · colszowka/simplecov