概要

新しくRails 6.0がリリースされました。 私は普段simplecovというgemを使ってテストのカバレッジを取得しているのですが、Rails 6.0のプロジェクトではうまくカバレッジを取得できませんでした。 ここでは、Rails 6.0のテストでカバレッジを取得する方法について紹介します。

環境

  • Rails 6.0.1
  • simplecov 0.17.1

導入

カバレッジの取得にはsimplecovというgemを使用します。 simplecovをインストールするために、Gemfileに次の内容を追記します。

gem 'simplecov', require: false, group: :test

次のコマンドでインストールします。

$ bundle install

設定

インストールしただけでは使うことができないので、設定を追加します。

設定は、test/test_helper.rbの先頭に次のコードを追加します。

require 'simplecov'
SimpleCov.start 'rails'

この設定はテストの際にsimplecovを使ってカバレッジの計測を開始するコードです。

Rails 6.0固有の設定

Rails 6.0より前の場合では、上記の設定まですればカバレッジを取得できました。 しかし、Rails 6.0からテストの並列化がデフォルトで行われるようになり、今までの設定ではうまくカバレッジを取得できません。

実際にやってみると、カバレッジがなぜか0%や0%に近い値となると思います。

この記事を書いている時点(2019/12)でsimplecovの方で対応がされておらず、どうしようもありません。

SimpleCov showing incorrect coverage result when parallelize is enabled in Rails 6.0.0 beta3 · Issue #718 · simplecov-ruby/simplecov

GitHubの方でIssueは既にあるため、いずれは対応されると思いますが、対応が大変なようなので、現時点ではテストの並列化をしながらカバレッジを取得するというのは難しいようです。

仕方ないので、テストの並列化をやめてしまいましょう。 テストの並列化をやめるにはtest/test_helper.rbに記述されている次の記述をコメントアウトします。

# parallelize(workers: :number_of_processors)

これで、カバレッジを正常に取得できるようになりました。

さいごに

かなりこの設定でハマってしまいました。

同じような悩みを持つ人の参考になれば幸いです。