代码之家  ›  专栏  ›  技术社区  ›  gomisha

SonarQube没有显示Ruby on Rails项目的测试代码覆盖率

  •  0
  • gomisha  · 技术社区  · 5 年前

    我有一个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%的覆盖率。

    SonarQube coverage report

    跑步 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覆盖率报告时遇到了问题-它的格式没有按预期的方式设置。

    0 回复  |  直到 5 年前
        1
  •  4
  •   Nicole Ashley Christopher Vickers    5 年前

    Sonar的SimpleCov支持预计 .resultset.json 文件,而不是JSON格式化程序的输出。您需要将配置指向结果集:

    sonar.ruby.coverage.reportPaths=coverage/.resultset.json