RailsのSimpleCovでカバレッジレポートが出力されない場合の対処法

  • 8
    Like
  • 0
    Comment
More than 1 year has passed since last update.

環境

Ruby 2.0
Rails 4.0
simplecov 0.9.2
またテストはRSpecを使用

状況

Gemfileとspec_helper.rbは以下のように設定

Gemfile
group :test do
  # 以下追記
  gem 'simplecov', require: false
end
spec_helper.rb
# 以下追記
require 'simplecov'
SimpleCov.start 'rails'

RSpecの実行

$ bundle exec spring rspec spec

カバレッジのレポートはcoverage/index.htmlを開くと確認可能ですが、
見てみると全ての項目が100%に、つまりレポートが1つも出力されていませんでした。

対処法

最初にSimpleCov.startを実行する

SimpleCov.startの記述位置が問題となっている場合があります。
これはspec_helper.rb内の先頭に記述される必要があります。

ダメな例

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

良い例

spec_helper.rb
# 先頭に配置
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とsimpecovは相性が良くないらしので、実行する際は

$ bundle exec rspec spec

で実行します。

まとめ

simplecovのissues見ると「レポートが出力されない」という事例がいくつかあるみたいなので、
今回紹介した方法でなおらなければissuesを漁ってみるといいかもしれません。

参考

Always 100% test coverage with Ruby 2.0p353 and Rails 4.1beta · Issue #271 · colszowka/simplecov