Karma — это тестовый раннер для JavaScript, который позволяет запускать тесты в реальных браузерах. Основной способ его использования заключается в интеграции с тестовыми фреймворками, такими как Jasmine, Mocha или QUnit. Установка производится через npm:
npm install --save-dev karma karma-cli
После установки CLI-команды karma становятся доступными
глобально. Инициализация конфигурационного файла выполняется
командой:
npx karma init
В процессе инициализации требуется указать: используемый тестовый
фреймворк, браузеры для запуска тестов, файлы с исходным кодом и
тестами, а также дополнительные плагины. Результатом будет файл
karma.conf.js, содержащий все настройки проекта.
Файл karma.conf.js — это JavaScript-модуль,
экспортирующий функцию с объектом конфигурации:
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, coverage и
другие).LOG_DISABLE, LOG_ERROR,
LOG_WARN, LOG_INFO,
LOG_DEBUG).Chrome, Firefox, Safari,
PhantomJS и др.).Для современных проектов часто требуется транспиляция кода. Karma
поддерживает подключение препроцессоров через
karma-preprocessor. Например, настройка с Babel выглядит
так:
preprocessors: {
'src/**/*.js': ['babel'],
'test/**/*.spec.js': ['babel']
},
babelPreprocessor: {
options: {
presets: ['@babel/preset-env'],
sourceMap: 'inline'
}
}
Препроцессоры позволяют работать с современным синтаксисом JavaScript и TypeScript, а также генерировать карты исходного кода для удобного отладки.
Отчеты о тестировании можно гибко конфигурировать. Наиболее популярные варианты:
Пример использования отчета о покрытии:
reporters: ['progress', 'coverage'],
coverageReporter: {
type: 'html',
dir: 'coverage/'
}
HTML-отчет позволяет визуально оценивать покрытие каждого файла.
Karma запускает тесты в реальных браузерах. Для каждого браузера необходимо установить соответствующий плагин:
npm install --save-dev karma-chrome-launcher karma-firefox-launcher
В конфигурации указывается список браузеров:
browsers: ['ChromeHeadless', 'FirefoxHeadless']
Использование режима Headless удобно для CI/CD-процессов, так как не требует визуального интерфейса браузера.
Параметр autoWatch в сочетании с singleRun
позволяет настроить режим постоянного отслеживания изменений файлов и
автоматического перезапуска тестов:
autoWatch: true,
singleRun: false
Для CI/CD лучше использовать:
autoWatch: false,
singleRun: true
Это обеспечивает однократное выполнение тестов и корректный выход из процесса, что необходимо для автоматизированных сборок.
Karma включает встроенный сервер для запуска тестов. Параметр
port задаёт порт сервера, а logLevel
регулирует детализацию вывода. Часто используется LOG_INFO
для стандартного уровня или LOG_DEBUG для детальной
отладки.
port: 9876,
logLevel: config.LOG_INFO
Параметр concurrency контролирует количество
одновременно запущенных браузеров:
concurrency: 3
Это ускоряет выполнение тестов при наличии нескольких браузеров и доступных ресурсов, особенно в проектах с большим количеством тестов.
Базовая конфигурация Karma объединяет следующие элементы:
Такой подход обеспечивает стабильное и воспроизводимое тестирование JavaScript-кода на любом этапе разработки.