我有一个Ruby on Rails项目,我想在SonarQube中显示测试覆盖率。该项目由Jenkins共同完成,Jenkins将结果发送给SonarQube。单元测试使用rspec运行,代码覆盖率使用SimpleCov计算。SonarQube要求以json格式生成代码覆盖率报告,所以我使用
simplecov-json
在我的
rails_helper.rb
:
if Rails.env.development? || Rails.env.test?
require 'simplecov'
require 'simplecov-json'
SimpleCov.formatter = SimpleCov::Formatter::JSONFormatter
SimpleCov.start
end
代码覆盖率报告已成功生成并保存到
coverage
这样的文件夹(来自Jenkins控制台输出):
Coverage report generated for RSpec to /my-project/coverage/coverage.json. 2000 / 2000 LOC (100.0%) covered.
我配置了
sonar-project.properties
如下(阅读报道):
sonar.sources=.
sonar.exclusions=**/*_test.go,**/vendor/**,**/coverage/**
sonar.tests=.
sonar.test.inclusions=**/*_spec.rb
sonar.test.exclusions=**/vendor/**
sonar.ruby.coverage.reportPaths=coverage/coverage.json
sonar.ruby.coverage.framework=RSpec
Jenkins构建项目,运行测试,生成覆盖率报告,并将结果发送给SonarQube。但由于某些原因,SonarQube总是显示0%的覆盖率。
跑步
sonar-scanner -X
(调试模式)显示此错误(Jenkins控制台日志):
15:52:30.458 ERROR: Cannot read coverage report file, expecting standard SimpleCov resultset JSON format: 'coverage/coverage.json'
java.lang.ClassCastException: java.lang.String cannot be cast to org.sonarsource.analyzer.commons.internal.json.simple.JSONObject
at org.sonarsource.ruby.plugin.SimpleCovSensor.mergeFileCoverages(SimpleCovSensor.java:112)
at org.sonarsource.ruby.plugin.SimpleCovSensor.execute(SimpleCovSensor.java:71)
at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:45)
看起来SonarQube在读取json覆盖率报告时遇到了问题-它的格式没有按预期的方式设置。