SonarQubeでテストカバレッジを表示したいRubyonRailsプロジェクトがあります。プロジェクトは、結果をSonarQubeに送信するJenkinsで構築されています。ユニットテストは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カバレッジレポートを読むのに問題があるようです-期待どおりにフォーマットされていません。
SonarのSimpleCovサポートは.resultset.json
、JSONフォーマッターの出力ではなく、ファイルを想定しています。代わりに、構成が結果セットを指すようにする必要があります。
sonar.ruby.coverage.reportPaths=coverage/.resultset.json
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加