У меня есть проект Ruby on Rails, который я хочу отображать тестовое покрытие в SonarQube.Проект построен с помощью 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
Дженкинс строит проект, запускаеттесты, генерирует отчет о покрытии, отправляет результаты в 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 - он не отформатирован так, как ожидалось.