Привет!

Не можете найти инструмент покрытия кода Javascript, совместимый с Sonar? Мы были в такой же ситуации неделю назад. Основной проблемой, с которой мы столкнулись, была публикация отчета о модульном тестировании в Sonar. Мы провели серьезное исследование и нашли способ публиковать сгенерированные отчеты в Sonar.

Мы использовали Karma и Jasmine для написания тестовых случаев и karma-coverage-istanbul-reporter в качестве репортера освещения. Репортер покрытия совместим с SonarQube, но требует вывода в формате lcov. Мы использовали репортер karma junit xml для создания отчета о модульном тестировании. Однако отчет, созданный junit, несовместим с Sonar.

Согласно документу SonarQube, он поддерживает файлы отчета о покрытии, сгенерированные lcov, а для анализа выполнения тестов Sonar поддерживает отчеты, сгенерированные jest-sonar-reporter или karma-sonarqube-unit-reporter. Итак, в этой статье мы увидим, как создавать отчеты с помощью этих репортеров и интегрировать их с Sonar.

Разобьем этот процесс на этапы -

  1. Создание отчетов о покрытии кода и модульных тестах
  2. Интеграция сгенерированных отчетов с Sonar

Прежде чем двигаться дальше, убедитесь, что вы установили Node JS, Angular CLI, Sonarqube и создали проект Javascript.

1. Создание отчетов о покрытии кода и модульных тестах —

Для отчета модульного тестирования мы будем использовать sonarQubeUnitReporter, который совместим с Karma и Sonar.

В файл package.json добавьте karma-coverage-istanbul-reporterиkarma-sonarqube-unit-reporterкак devDependencies, чтобы настроить его для своего проекта. Затем запустите

установка нпм

Добавьте karma-coverage-istanbul-reporter и sonarQubeUnitReporter в файл конфигурации Karma (karma.conf.js)

Образец karma.conf.js

plugins : [
require('karma-coverage-istanbul-reporter'),
require('karma-sonarqube-unit-reporter')
],
coverageIstanbulReporter: {
reports : ['html', 'text-summary', 'text', 'lcov'],
fixWebpackSourcePaths: true,
'report-config': {
'html': {
subdir: 'html'
}
}
},
sonarQubeUnitReporter: {
      sonarQubeVersion: 'LATEST',
      outputFile: 'reports/ut_report.xml',
      overrideTestDescription: true,
      testPaths: ['./test'],
      testFilePattern: '.spec.js',
      useBrowserName: false
},
reporters:['coverage-istanbul', 'sonarQubeUnit']

Запустите команду ниже для создания отчетов -

ng test --code охват --reporters охват-Стамбул sonarQubeUnit

Or,

В файле package.json создайте собственный скрипт —

"scripts": {
"test" : "ng test --code coverage --reporters coverage-istanbul sonarQubeUnit"
}

Тогда беги,

запустить тест npm

Папка coverage будет создана в том же месте, что и ваш файл karma.conf.js. Внутри вы найдете папку с именем lcov-report и файл lcov.info(для Typescript), а файл отчета модульного тестирования будет создан в указанной папке.

2. Интеграция сгенерированных отчетов с Sonar

Создайте файл sonar.properties в корневом каталоге вашего проекта.

Добавьте пути к сгенерированным отчетам в sonar.properties -

# Path to coverage report
sonar.javascript.lcov.reportPaths = $dir/coverage/lcov.info
# Path to unit test report
sonar.testExecutionReportPaths = $dir/reports/ut_report.xml

Создайте токен API и выполните приведенную ниже команду для анализа сонара —

sonar-scanner -Dsonar.branch.name='$Branchname' -Dproject.settings=sonar.properties -Dsonar.login='$SonarAPIToken'

Это опубликует созданный вами отчет о покрытии и модульном тестировании в Sonar.

Ссылки :