SonarQube не отображает покрытие тестового кода проекта Ruby on Rails - PullRequest
0 голосов
/ 05 марта 2019

У меня есть проект 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% покрытия по какой-то причине.

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 - он не отформатирован так, как ожидалось.

...