Karma — это тестовый раннер для JavaScript, который обеспечивает
выполнение тестов в реальных браузерах и автоматическую интеграцию с
различными фреймворками, такими как Jasmine, Mocha или QUnit. Один из
ключевых способов управления запуском тестов — через скрипты в
package.json. Этот подход позволяет стандартизировать
запуск тестов и интегрировать его с CI/CD.
Файл package.json содержит раздел scripts,
где можно определить команды для запуска Karma. Простейший пример:
{
"scripts": {
"test": "karma start karma.conf.js"
}
}
Здесь:
test — имя скрипта, которое можно вызвать командой
npm test.karma start karma.conf.js — команда запуска Karma с
конфигурационным файлом karma.conf.js.Использование npm test вместо прямого вызова Karma
делает процесс универсальным и переносимым между командами разработчиков
и средами CI/CD.
Karma позволяет передавать параметры командной строки для настройки поведения тестов. Например:
{
"scripts": {
"test": "karma start karma.conf.js --browsers ChromeHeadless --single-run"
}
}
--browsers ChromeHeadless — запуск тестов в безголовом
режиме Chrome.--single-run — выполнение тестов один раз и завершение
процесса, что особенно полезно для CI.Можно комбинировать несколько опций:
{
"scripts": {
"test:watch": "karma start karma.conf.js --auto-watch --browsers Chrome",
"test:ci": "karma start karma.conf.js --browsers ChromeHeadless --single-run --reporters junit"
}
}
--auto-watch включает автоматический пересмотр файлов
при изменении кода.--reporters junit позволяет выводить результаты в
формате JUnit, удобном для CI/CD.Для более гибкой настройки можно использовать переменные окружения. Например:
{
"scripts": {
"test": "BROWSER=ChromeHeadless karma start karma.conf.js"
}
}
В конфигурационном файле Karma можно считывать эти переменные:
module.exports = function(config) {
const browser = process.env.BROWSER || 'Chrome';
config.set({
browsers: [browser],
singleRun: true
});
};
Такой подход позволяет запускать тесты в разных браузерах без
изменения package.json и karma.conf.js.
Для интеграции с Jenkins, GitLab CI или GitHub Actions важно
использовать режим --single-run и безголовый браузер:
{
"scripts": {
"test:ci": "karma start karma.conf.js --browsers ChromeHeadless --single-run --reporters junit,dots"
}
}
dots выводит компактный лог выполнения тестов.junit формирует XML-файл, который можно использовать в
CI для отчетности.CI-пайплайны обычно вызывают команду через
npm run test:ci, что обеспечивает воспроизводимость и
единый формат логов.
Можно создавать отдельные скрипты для разных наборов тестов:
{
"scripts": {
"test:unit": "karma start karma.unit.conf.js --single-run",
"test:e2e": "karma start karma.e2e.conf.js --single-run"
}
}
karma.unit.conf.js — конфигурация для модульных
тестов.karma.e2e.conf.js — конфигурация для end-to-end
тестирования.Такое разделение повышает читаемость и удобство запуска в разных контекстах.
Karma поддерживает множество репортеров. В скриптах
package.json их можно комбинировать:
{
"scripts": {
"test": "karma start karma.conf.js --reporters progress,junit,coverage"
}
}
progress — отображение прогресса выполнения тестов в
консоли.junit — формирует XML для CI.coverage — генерирует отчёт о покрытии кода.Можно указать директорию для отчетов прямо в конфигурации Karma:
coverageReporter: {
type : 'html',
dir : 'coverage/'
}
Karma позволяет запускать несколько браузеров одновременно. Это ускоряет тестирование больших проектов:
{
"scripts": {
"test:parallel": "karma start karma.conf.js --browsers ChromeHeadless,FirefoxHeadless --single-run"
}
}
Конфигурация для CI может включать несколько браузеров и разные режимы отчётности, обеспечивая полное покрытие.
package.json для проекта с Karma{
"scripts": {
"test": "karma start karma.conf.js",
"test:watch": "karma start karma.conf.js --auto-watch --browsers Chrome",
"test:ci": "karma start karma.conf.js --browsers ChromeHeadless --single-run --reporters junit,dots",
"test:unit": "karma start karma.unit.conf.js --single-run",
"test:e2e": "karma start karma.e2e.conf.js --single-run",
"test:parallel": "karma start karma.conf.js --browsers ChromeHeadless,FirefoxHeadless --single-run"
}
}
Такое оформление скриптов позволяет гибко управлять тестированием, адаптировать запуск под локальную разработку, автоматическое наблюдение за изменениями и CI/CD.
Каждый скрипт можно адаптировать под конкретные задачи проекта, добавляя дополнительные опции командной строки или переменные окружения, сохраняя при этом единообразие и воспроизводимость тестового процесса.