Coverage reporter в Karma — это инструмент для измерения покрытия кода тестами, который позволяет понять, какие части приложения реально проверяются в тестах, а какие остаются неиспользованными. Он интегрируется с популярными инструментами анализа покрытия, такими как Istanbul и его форки, и предоставляет подробную статистику по строкам, функциям и ветвлениям кода.
Для начала необходимо установить пакет, обеспечивающий генерацию отчётов покрытия:
npm install karma-coverage --save-dev
В конфигурационном файле karma.conf.js coverage reporter
подключается следующим образом:
module.exports = function(config) {
config.set({
frameworks: ['jasmine'], // или mocha, qunit и др.
files: [
'src/**/*.js',
'test/**/*.spec.js'
],
preprocessors: {
'src/**/*.js': ['coverage']
},
reporters: ['progress', 'coverage'],
coverageReporter: {
type : 'html', // формат отчета: html, lcov, text, text-summary
dir : 'coverage/', // папка для хранения отчета
includeAllSources: true
}
});
};
Ключевые параметры:
html создаёт
интерактивный веб-отчёт, lcov подходит для CI и интеграции
с SonarQube, text и text-summary выводят отчет
в консоль.Для работы coverage reporter требуется, чтобы исходный код проходил
через препроцессор coverage. Это необходимо, чтобы
инструмент мог вставить специальные счётчики в код, отслеживающие
выполнение каждой строки и функции.
Пример настройки препроцессора:
preprocessors: {
'src/**/*.js': ['coverage']
}
Можно комбинировать несколько препроцессоров, например, для транспиляции через Babel:
preprocessors: {
'src/**/*.js': ['babel', 'coverage']
}
Важно помнить: порядок препроцессоров имеет значение. Сначала происходит транспиляция, затем инструмент вставляет счетчики покрытия.
Можно указать несколько типов одновременно:
coverageReporter: {
reporters: [
{ type: 'html', dir: 'coverage/html' },
{ type: 'lcov', dir: 'coverage/lcov' },
{ type: 'text-summary' }
]
}
HTML-отчёт позволяет детально увидеть покрытие:
В текстовом отчете выводятся статистические показатели:
Для автоматического контроля покрытия можно настроить CI, чтобы сборка падала при недостаточном покрытии. Karma поддерживает параметры check, позволяющие задать минимальные пороги:
coverageReporter: {
check: {
global: {
statements: 80,
branches: 70,
functions: 80,
lines: 80
},
each: {
statements: 70,
branches: 60,
functions: 70,
lines: 70
}
}
}
Если порог не достигнут, тесты возвращают ошибку, что предотвращает выпуск недокументированного кода.
includeAllSources, чтобы видеть покрытие всех
модулей, а не только тех, что импортированы в тестах.Coverage reporter в Karma позволяет не только измерять эффективность тестов, но и выстраивать строгую дисциплину разработки, обеспечивая прозрачность и контроль над качеством кода.