Karma — это тестовый раннер для JavaScript, который интегрируется с различными фреймворками тестирования (Jasmine, Mocha, QUnit) и позволяет запускать тесты в реальных браузерах. Он особенно полезен для проверки совместимости кода на разных движках и автоматизации CI/CD процессов.
Karma устанавливается через npm как глобально, так и локально в проект. Рекомендуется использовать локальную установку для обеспечения одинаковых версий в команде и CI.
npm install karma --save-dev
npm install karma-cli --save-dev
После этого устанавливаются необходимые плагины для выбранного тестового фреймворка и браузеров:
npm install karma-jasmine karma-chrome-launcher karma-mocha --save-dev
karma-jasmine — адаптер для фреймворка Jasmine.karma-mocha — адаптер для Mocha.karma-chrome-launcher — позволяет запускать тесты в
Chrome.Karma предоставляет CLI для генерации файла конфигурации
karma.conf.js.
npx karma init
CLI задаст следующие ключевые параметры:
Файл конфигурации является основным центром настройки Karma. В нем задаются пути к тестовым файлам, плагины, браузеры, репортеры и другие опции.
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
files: [
'src/**/*.js',
'test/**/*.spec.js'
],
exclude: [],
preprocessors: {},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
concurrency: Infinity
})
}
progress, dots, mocha).true, Karma будет
отслеживать изменения файлов и автоматически перезапускать тесты.true, тесты
запускаются один раз и процесс завершается (удобно для CI).Для современных приложений часто используется Webpack или Babel. Karma позволяет подключать препроцессоры:
preprocessors: {
'src/**/*.js': ['webpack'],
'test/**/*.spec.js': ['webpack']
},
webpack: {
mode: 'development',
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
}
Такое подключение обеспечивает поддержку современных стандартов JavaScript, модулей ES6 и других возможностей, не поддерживаемых браузерами напрямую.
Karma может запускать тесты как в интерактивном режиме, так и в CI-процессах:
npx karma start
autoWatch: true откроется браузер, тесты будут
автоматически пересобираться и выполняться при изменении файлов.singleRun: true тесты выполняются один раз и
выводятся в консоль, после чего процесс завершает работу.Karma поддерживает различные форматы отчетов о тестах:
progress — стандартный прогресс выполнения.dots — точечное отображение каждого теста.mocha — подробный формат с иерархией тестов и цветовой
маркировкой.junit — XML формат для интеграции с CI.Пример подключения нескольких репортеров:
reporters: ['progress', 'mocha', 'junit'],
junitReporter: {
outputDir: 'test-results',
outputFile: 'results.xml',
useBrowserName: false
}
Для обеспечения кроссбраузерности тесты можно запускать в нескольких браузерах одновременно:
browsers: ['Chrome', 'Firefox', 'Safari'],
customLaunchers: {
ChromeHeadlessCI: {
base: 'ChromeHeadless',
flags: ['--no-sandbox', '--disable-gpu']
}
}
Headless режим полезен для CI/CD, так как не требует визуального интерфейса браузера.
Karma отлично интегрируется с Jenkins, GitHub Actions, GitLab CI.
Рекомендуется использовать singleRun: true и headless
браузеры для корректной работы в серверной среде.
Пример минимальной конфигурации для CI:
autoWatch: false,
singleRun: true,
browsers: ['ChromeHeadlessCI']
Такой подход обеспечивает воспроизводимость тестов, минимизирует зависимость от локальной среды разработчика и позволяет автоматически проверять код при каждом пуше.
src
и test)..spec.js
или .test.js.karma.conf.js
для уменьшения времени запуска.Эффективное использование Karma в Node.js окружении обеспечивает стабильность тестов, автоматизацию процессов и кроссбраузерное покрытие, что критично для современных веб-приложений.