こころがホッコリー

ただイカしたRubyistになりたい人生だった。

CodeClimateのカバレッジ測定が、従来の設定で動かなくなったので修正してみた

Code Climate + Circle CI でRubyプロジェクトのコードカバレッジを計測しようとしてみたところ、
codeclimate-test-reporterのバージョンが上がっていて、
従来の設定(ネットに転がっているもの)では動かなくなっていたので、修正した部分を備忘録として残しておきます。

従来の設定

まず、従来の設定です。
spec_helper.rbに、以下のように書く、という情報が多く見受けられました。

require "simplecov"
require 'codeclimate-test-reporter'

SimpleCov.start do
  add_filter "/vendor/"
  add_filter "/spec/"

  formatter SimpleCov::Formatter::MultiFormatter[
              SimpleCov::Formatter::HTMLFormatter,
              CodeClimate::TestReporter::Formatter
            ]
end

これで、rspecを回してみると、以下のようなエラーが出ます。

Formatter CodeClimate::TestReporter::Formatter failed with CodeClimate::TestReporter::Formatter::InvalidSimpleCovResultError: undefined method `values' for #<SimpleCov::Result:0x007fb06257bdd0> (/Users/ym/.rbenv/versions/2.0.0-p647/lib/ruby/gems/2.0.0/gems/codeclimate-test-reporter-1.0.3/lib/code_climate/test_reporter/formatter.rb:21:in `rescue in format')

知らんがな(´・ω・`)

正しい設定

正しい設定はこちらです。まず、同じくspec_helper.rbを書きます。

require "simplecov"

SimpleCov.start do
  add_filter "/vendor/"
  add_filter "/spec/"
end

更に、CircleCIの方で CODECLIMATE_REPO_TOKEN=<token>GUI上で設定*1した上で、
bundle exec codeclimate-test-reporter を実行するよう circle.yml に仕込む必要があります。

test:
  override:
    - bundle exec rspec
    - bundle exec codeclimate-test-reporter

これで、カバレッジを測定した結果を、CodeClimateに送信してくれるようになります。

おわりに

今回の変更のくだりは、公式ドキュメントに書いてあります。

https://docs.codeclimate.com/docs/ruby

が、bundle exec codeclimate-test-reporter の実行を、CIツール側でどう設定するのかまでは書かれていなかったので、今回設定するのに苦労しました。

なお、Travis CIに対応させる方法は、こちらの記事が参考になります。(CircleCIに対応させる上で、私も参考にしました)

web-salad.hateblo.jp