LoginSignup
1
1

More than 5 years have passed since last update.

coveralls と parallel_tests を CircleCI で同時に使う

Last updated at Posted at 2019-05-08

CircleCI で coveralls.ioparallel_tests を組み合わせたらハマったのでメモ

問題

parallel_tests で実行したテストを simplecov でHTML出力して見ていたのだが、定期的に収集したくなって coveralls.io を導入した。そしたらHTMLの出力結果は正しく得られるが、 coveralls.io 上で表示される結果がHTMLのものより低く出て困った。

登場する RubyGems

やったこと

Coveralls.wear!

spec_helper.rb
require 'coveralls'
Coveralls.wear!

これだと平行して走らせてるそれぞれのテストが終わるたびに coveralls.io に結果が送信され、はじめに送られたカバレッジのみが反映される。

🔺 parallel=true でリクエストする

PARALLEL BUILDS WEBHOOK - coveralls.io にかいてある方法。結果はマージされるけど、カバレッジレポートが毎回新しくなってしまい、カバレッジの増減をレポートできなかった。

コード見ると平行テストじゃなくて平行ビルドのサポートっぽく、一つのコンテナでビルドする時はparallel=trueにならないのでちょっと改造して検証した。

lib/coveralls/configuration.rb
def self.set_service_params_for_circleci(config)
  ...
  config[:parallel]             = ENV['CIRCLE_NODE_TOTAL'].to_i > 1
  ...
end

この箇所をこうした

config[:parallel]             = ENV['CIRCLE_NODE_TOTAL'].to_i > 1 unless config[:parallel]

⭕️ SimpleCov.at_exitParallelTestsの実行状況をチェックする

結果的にこれで行けた。 parallel_testsのwikiに書いてあった方法。 With simplecov -- by a grateful user - parallel_tests wiki

spec_helper.rb
require 'simplecov'
require 'coveralls'
require 'parallel_tests'

SimpleCov.start
SimpleCov.at_exit do
  # 今まで通りの出力
  SimpleCov.result.format!
  # 最後の平行テスト
  Coveralls.push! if ParallelTests.number_of_running_processes <= 1
end

SimpleCov.at_exit を実行すると既存の動きが上書きされるので、 SimpleCov.result.format! で今まで通り simplecov のHTMLフォーマットを出力しつつ、最後のテストが終わったときだけ coveralls.io に送信するようにしたら正しく結果が出るようになった。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1