Karma — это тестовый раннер для JavaScript, который позволяет
запускать тесты в реальных браузерах, обеспечивая точное воспроизведение
поведения кода в среде пользователя. Основой работы Karma является
конфигурационный файл karma.conf.js, в котором задаются все
параметры тестирования: браузеры, фреймворки, файлы, плагины и
отчёты.
Для установки Karma используется пакетный менеджер npm:
npm install --save-dev karma
После установки следует выбрать фреймворки для тестирования, например, Jasmine, Mocha или QUnit:
npm install --save-dev karma-jasmine jasmine-core
Для запуска тестов в браузерах требуется подключение соответствующих пакетов:
npm install --save-dev karma-chrome-launcher karma-firefox-launcher
Файл karma.conf.js экспортирует объект с настройками.
Основные ключевые параметры:
frameworks — массив тестовых фреймворков, например,
['jasmine'].files — массив путей к тестируемым файлам и файлам
тестов.exclude — файлы или каталоги, которые следует
игнорировать.browsers — список браузеров, в которых будут
запускаться тесты, например, ['Chrome', 'Firefox'].plugins — подключаемые модули Karma.reporters — типы отчётов о результатах тестов
(progress, dots, coverage).autoWatch — логическое значение: автоматически
запускать тесты при изменении файлов.singleRun — логическое значение: запускать тесты один
раз и завершать процесс.Пример базовой конфигурации:
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
files: [
'src/**/*.js',
'test/**/*.spec.js'
],
browsers: ['ChromeHeadless'],
reporters: ['progress'],
autoWatch: true,
singleRun: false
});
};
Karma поддерживает множество плагинов для расширения функционала. Наиболее часто используются:
karma-coverage — генерация отчётов по покрытию
кода.karma-webpack — интеграция с Webpack для сборки
модулей.karma-sourcemap-loader — поддержка исходных карт для
отладки.karma-spec-reporter — удобный текстовый вывод
результатов тестирования.Плагины подключаются через поле plugins или
автоматически, если установлены через npm. Например:
plugins: [
'karma-jasmine',
'karma-chrome-launcher',
'karma-coverage'
]
Отчёты помогают отслеживать прогресс тестирования и качество кода. Karma поддерживает несколько типов:
progress — стандартный индикатор прогресса выполнения
тестов.dots — краткий вывод точками.coverage — отчёт о покрытии кода, который генерируется
плагином karma-coverage.Пример конфигурации покрытия кода:
reporters: ['progress', 'coverage'],
coverageReporter: {
type: 'html',
dir: 'coverage/',
includeAllSources: true
}
Karma позволяет тестировать код в нескольких браузерах одновременно. Для удобства часто используются headless-версии браузеров, которые запускаются без GUI, что ускоряет тестирование в CI/CD. Например:
browsers: ['ChromeHeadless', 'FirefoxHeadless']
Можно создавать кастомные конфигурации для браузеров:
customLaunchers: {
ChromeHeadlessNoSandbox: {
base: 'ChromeHeadless',
flags: ['--no-sandbox', '--disable-gpu']
}
}
Параметр autoWatch позволяет Karma отслеживать изменения
в файлах и автоматически перезапускать тесты. В связке с
singleRun: false это обеспечивает непрерывную проверку кода
во время разработки. Для крупных проектов возможна фильтрация
наблюдения:
autoWatchBatchDelay: 250, // задержка перед повторным запуском тестов после изменений
Karma легко интегрируется с Webpack, Gulp, Grunt и системами
непрерывной интеграции, такими как Jenkins, GitHub Actions, GitLab CI. В
связке с Webpack используется плагин karma-webpack для
сборки модулей перед тестированием. Пример конфигурации:
preprocessors: {
'src/**/*.js': ['webpack', 'sourcemap'],
'test/**/*.spec.js': ['webpack']
},
webpack: {
mode: 'development',
devtool: 'inline-source-map',
module: {
rules: [
{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' }
]
}
}
Это позволяет запускать тесты с современным синтаксисом JavaScript и поддержкой модулей ES6.
Эти практики позволяют создавать масштабируемую и управляемую среду тестирования с высокой точностью воспроизведения поведения кода в браузерах.