Karma — это тестовый раннер для JavaScript, который тесно интегрируется с инструментами покрытия кода, такими как Istanbul/nyc. Часто возникает необходимость исключить определённые файлы или директории из анализа покрытия, чтобы отчёты отражали только релевантный код, а тестирование оставалось точным и информативным. Это особенно важно для вспомогательных скриптов, конфигурационных файлов или библиотек, которые не влияют на бизнес-логику.
karma.conf.jsВ конфигурационном файле Karma ключевую роль играет свойство coverageReporter. В нём можно задать параметр exclude, чтобы исключить файлы по маске.
Пример настройки:
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
files: [
'src/**/*.js',
'test/**/*.spec.js'
],
preprocessors: {
'src/**/*.js': ['coverage']
},
reporters: ['progress', 'coverage'],
coverageReporter: {
type: 'html',
dir: 'coverage/',
exclude: [
'src/utils/**', // Исключение всех файлов в папке utils
'src/config/*.js', // Исключение всех js файлов в config
'src/main.js' // Исключение конкретного файла
]
}
});
};
Ключевые моменты:
exclude принимает массив строк с шаблонами путей.*, **) для
гибкой фильтрации.Иногда требуется более точечный контроль, исключая файлы ещё до генерации покрытия. В разделе preprocessors можно применять маски только к нужным файлам:
preprocessors: {
'src/**/*.js': ['coverage'],
'!src/vendor/**/*.js': [] // Исключение сторонних библиотек
}
Здесь символ ! используется для инверсии маски, что
позволяет не включать указанные директории в обработку coverage. Этот
метод особенно полезен при большом проекте с множеством вспомогательных
библиотек.
karma-coverage-istanbul-reporterВ современном стеке часто применяется плагин karma-coverage-istanbul-reporter, который расширяет возможности фильтрации:
coverageIstanbulReporter: {
reports: ['html', 'lcovonly', 'text-summary'],
dir: 'coverage/',
fixWebpackSourcePaths: true,
skipFilesWithNoCoverage: true,
'report-config': {
html: { subdir: 'html' }
},
thresholds: {
global: { statements: 80, lines: 80, branches: 75, functions: 80 }
},
exclude: [
'src/helpers/**',
'src/config/*.js'
]
}
Особенности:
skipFilesWithNoCoverage — пропускает файлы, которые не
имеют тестов.fixWebpackSourcePaths — корректирует пути после сборки
через Webpack.exclude работает аналогично параметру в обычном
coverageReporter, но с улучшенной интеграцией для сложных
проектов..nycrc или package.jsonПри использовании nyc (Istanbul CLI) можно управлять исключениями на уровне конфигурации:
{
"nyc": {
"all": true,
"include": ["src/**/*.js"],
"exclude": ["src/config/*.js", "src/utils/**", "src/vendor/**"],
"reporter": ["html", "text-summary"]
}
}
all: true гарантирует, что покрытие собирается даже для
файлов без тестов.exclude фильтрует ненужные пути для генерации
отчёта.karma-coverage-istanbul-reporter.**)
для директорий, а конкретные маски для отдельных файлов.Исключение файлов из покрытия — это не просто косметическая настройка, а инструмент, который позволяет создавать точные и полезные отчёты, концентрируясь только на бизнес-логике приложения. Правильная фильтрация помогает сократить шум в отчётах и ускоряет анализ тестов при масштабных проектах.