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に対応させる上で、私も参考にしました)