Karma — это тестовый раннер для JavaScript, который изначально поставляется с минимальным набором функций. Для расширения возможностей и интеграции с различными фреймворками, библиотеками и инструментами требуется установка дополнительных плагинов. Плагины в Karma представляют собой модули, которые реализуют адаптеры тестовых фреймворков, запускатели браузеров, репортеры и другие расширения.
Фреймворк-плагины Эти плагины позволяют Karma работать с различными фреймворками тестирования, такими как Jasmine, Mocha или QUnit. Примеры:
karma-jasminekarma-mochakarma-qunitПлагины браузеров (launchers) Они предоставляют возможность запускать тесты в разных браузерах, как локально, так и удаленно. Примеры:
karma-chrome-launcherkarma-firefox-launcherkarma-edge-launcherРепортеры (reporters) Репортеры отвечают за формат вывода результатов тестирования. Karma поддерживает текстовые, графические и структурированные отчеты. Примеры:
karma-spec-reporterkarma-coverage (покрытие кода)karma-junit-reporterПрочие плагины В эту категорию входят плагины для препроцессоров, трансформации файлов, интеграции с CI/CD и т. д. Примеры:
karma-webpack — для обработки модулей через
Webpackkarma-typescript — поддержка TypeScriptkarma-sourcemap-loader — загрузка sourcemaps для
удобного дебагаВсе плагины устанавливаются как npm-пакеты. Рекомендуется сохранять
их в devDependencies проекта:
npm install --save-dev karma-jasmine karma-chrome-launcher karma-coverage
После установки пакеты становятся доступными Karma, и их необходимо подключить в конфигурации.
karma.conf.jsФайл конфигурации Karma позволяет явно указывать, какие плагины
использовать. Если поле plugins не задано, Karma
автоматически пытается загрузить все установленные плагины, начинающиеся
с karma-.
Пример явного подключения:
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
browsers: ['ChromeHeadless'],
reporters: ['progress', 'coverage'],
plugins: [
'karma-jasmine',
'karma-chrome-launcher',
'karma-coverage'
],
coverageReporter: {
type: 'html',
dir: 'coverage/'
}
});
};
Важный момент: плагины должны соответствовать используемым
настройкам. Если указать reporters: ['coverage'],
но не установить karma-coverage, Karma выдаст ошибку о
ненайденном плагине.
Для локальной разработки чаще всего используют Chrome или Firefox. Для запуска тестов в headless-режиме следует применять специальные версии браузерных плагинов:
npm install --save-dev karma-chrome-launcher
В конфигурации:
browsers: ['ChromeHeadless'],
customLaunchers: {
ChromeHeadlessCI: {
base: 'ChromeHeadless',
flags: ['--no-sandbox', '--disable-gpu']
}
}
Флаг --no-sandbox необходим в окружениях CI/CD, где
отсутствуют стандартные разрешения пользователя.
Оптимальная практика — сразу устанавливать связку «фреймворк + браузерный запускатель + репортер». Например, для Jasmine и покрытия кода:
npm install --save-dev karma jasmine-core karma-jasmine karma-chrome-launcher karma-coverage
Конфигурация:
frameworks: ['jasmine'],
reporters: ['progress', 'coverage'],
browsers: ['ChromeHeadless']
Это гарантирует совместимость всех компонентов и упрощает поддержку проекта.
Если список plugins не указан, Karma автоматически ищет
все пакеты npm, начинающиеся с karma-. Например:
// karma.conf.js
module.exports = function(config) {
config.set({
frameworks: ['mocha'],
browsers: ['Firefox'],
reporters: ['dots']
// plugins не указываем, Karma загрузит все karma-* автоматически
});
};
Автозагрузка удобна для небольших проектов, но в крупных проектах явное указание плагинов повышает стабильность и предсказуемость сборки.
При установке плагинов важно учитывать версии Karma и самих плагинов. Старые версии браузерных launcher’ов или репортеров могут не работать с актуальными версиями Karma. Рекомендуется проверять зависимости на npm и использовать одинаковые мажорные версии.
Jasmine + ChromeHeadless + Coverage
npm install --save-dev karma karma-jasmine jasmine-core karma-chrome-launcher karma-coverageMocha + Firefox + Spec Reporter
npm install --save-dev karma karma-mocha mocha karma-firefox-launcher karma-spec-reporterAngular + Webpack + Coverage
npm install --save-dev karma karma-jasmine jasmine-core karma-chrome-launcher karma-webpack karma-coverageЭти комбинации отражают стандартные рабочие наборы для различных фреймворков и сред разработки.
Установка плагинов в Karma — фундаментальный шаг для построения стабильного и расширяемого окружения тестирования. Корректная установка и подключение обеспечивают совместимость фреймворка, браузеров и отчетности, а также позволяют интегрировать Karma в процессы CI/CD без дополнительных сложностей.