如何在运行parallel_test时合并CircleCI中的多个simplecov目录?

时间:2014-11-04 19:39:55

标签: ruby-on-rails rspec parallel-testing circleci simplecov

我有一个rails应用程序,它在circleci中使用rspec运行parallel_test

在互联网上环顾四周,我将其添加到我的spec_helper.rb文件的开头:

if ENV['COVERAGE']
  require 'simplecov'
  # on circleci change the output dir to the artifacts
  if ENV['CIRCLE_ARTIFACTS']
    dir = File.join("..", "..", "..", ENV['CIRCLE_ARTIFACTS'], "coverage")
    SimpleCov.coverage_dir(dir)
    SimpleCov.merge_timeout 3600
    SimpleCov.command_name "rspec_#{Process.pid.to_s}#{ENV['TEST_ENV_NUMBER']}"
  end
  SimpleCov.start 'rails'
end

问题是,因此我为每个circleci实例获得了一个不同的文件夹:

enter image description here

我做错了什么?

3 个答案:

答案 0 :(得分:6)

我在CircleCI工作。不幸的是,这不起作用 - 我们不会在所有构建完成运行之后从不同的构建中收集工件目录,因此在构建期间尝试将它们合并在一起的工具将不起作用。我们已经讨论了添加功能来实现这一目标,但目前还没有我们的功能路线图,抱歉!

答案 1 :(得分:3)

对于仍在寻找此问题解决方案的任何人,都有一种新的可能性:在容器之间使用ssh手动同步和合并报告,请参阅docs。但是,这不是一个交钥匙解决方案,您必须自己编写必要的脚本。

否则,您还可以使用外部覆盖服务(我们使用 coveralls codecov)和CircleCI的notification webhook

修改

您可以在circle.yml中添加这样的webhook(感谢Ian): notify: webhooks: - url: https://coveralls.io/webhook?repo_token=(your repo token)

答案 2 :(得分:1)

阐述Frank Eckert所说的Coveralls can do this。但是,该文档略有不同。

添加到您Gemfile

gem 'coveralls', require: false

添加到您的spec/spec_helper.rb

if ENV['CIRCLECI']
  # If running in CircleCI, run with Coveralls too
  require 'coveralls'
  Coveralls.wear!('rails')
end

添加到您的circle.yml(不是coveralls.yml,如文章所述):

notify:
  webhooks:
    - url: https://coveralls.io/webhook?repo_token=your-repo-token

在根文件夹中添加(或创建).coveralls.yml,然后添加:

repo_token: your-repo-token

最后,进入CircleCI项目配置并添加一个环境变量:COVERALLS_PARALLEL=true

这对我们有用,但我们在正确的行数(reported to Coveralls)中发现了错误,但它正在发挥作用,让我们对我们的覆盖范围随时间变化有了一个很好的了解。