Привет!
Не можете найти инструмент покрытия кода 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.
Разобьем этот процесс на этапы -
- Создание отчетов о покрытии кода и модульных тестах
- Интеграция сгенерированных отчетов с 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.