Programmatic API в Karma предоставляет возможность управлять запуском тестов, конфигурацией и обработкой результатов напрямую из кода JavaScript, минуя стандартный CLI. Это особенно полезно для интеграции Karma в сложные сборочные процессы, динамическое создание конфигураций и автоматизацию тестирования.
Для работы с Programmatic API необходимо импортировать конструктор
Server из пакета karma:
const { Server } = require('karma');
Создание экземпляра сервера происходит через передачу объекта конфигурации и функции обратного вызова, которая вызывается по завершении тестов:
const server = new Server({
configFile: __dirname + '/karma.conf.js',
singleRun: true
}, exitCode => {
console.log('Karma завершила работу с кодом выхода:', exitCode);
});
Запуск тестов осуществляется вызовом метода start():
server.start();
Метод start() возвращает промис, который завершится
после окончания выполнения всех тестов, что позволяет использовать его в
асинхронных сценариях.
Programmatic API позволяет полностью управлять конфигурацией Karma
через объект config. Это включает:
frameworks) — например,
['jasmine'].browsers) — например,
['ChromeHeadless'].files) —
шаблоны или конкретные файлы с тестами.plugins) —
подключение кастомных или сторонних плагинов.reporters) — управление
выводом результатов тестов.Пример динамической конфигурации:
const server = new Server({
frameworks: ['mocha'],
files: ['test/**/*.spec.js'],
browsers: ['ChromeHeadless'],
reporters: ['progress', 'kjhtml'],
singleRun: true
}, exitCode => {
console.log('Код выхода:', exitCode);
});
Такой подход позволяет менять конфигурацию во время выполнения программы: выбирать тесты, менять браузеры, включать или отключать репортеры.
В системах непрерывной интеграции часто требуется запускать тесты без ручного вмешательства. Programmatic API предоставляет полный контроль над процессом:
exitCode) для
определения успешности сборки.singleRun: true гарантирует завершение
процесса после выполнения тестов.Пример интеграции в скрипт CI:
const { Server } = require('karma');
const server = new Server({
configFile: __dirname + '/karma.conf.js',
singleRun: true
}, exitCode => {
process.exit(exitCode);
});
server.start();
Programmatic API позволяет подписываться на события Karma, что удобно для расширенного логирования или создания кастомных обработчиков:
server.on('browser_register', browser => {
console.log('Зарегистрирован браузер:', browser.name);
});
server.on('run_complete', (browsers, results) => {
console.log('Тесты завершены. Успешных:', results.success, 'Ошибок:', results.failed);
});
Основные события, доступные через Server:
browser_register — новый браузер подключился.browser_complete — завершение тестов в конкретном
браузере.run_start — начало выполнения всех тестов.run_complete — завершение всех тестов, с
результатами.Подписка на события позволяет создавать сложные сценарии автоматизации, например, запуск тестов в нескольких браузерах параллельно и агрегацию результатов.
Programmatic API предоставляет возможность интеграции кастомных плагинов и репортеров напрямую через объект конфигурации:
const server = new Server({
frameworks: ['jasmine'],
files: ['test/**/*.js'],
plugins: [
'karma-jasmine',
'karma-chrome-launcher',
{
'reporter:custom': ['type', function CustomReporter() {
this.onRunCompl ete = function(browsers, results) {
console.log('Кастомный репортер:', results);
};
}]
}
],
reporters: ['progress', 'custom'],
singleRun: true
}, exitCode => {
process.exit(exitCode);
});
Такой подход позволяет полностью контролировать процесс тестирования и интегрировать Karma в любые нестандартные рабочие процессы.
С версии Karma 6+ Server.start() возвращает промис, что
упрощает асинхронное управление:
async function runTests() {
const server = new Server({
configFile: __dirname + '/karma.conf.js',
singleRun: true
});
try {
await server.start();
console.log('Тесты выполнены успешно');
} catch (err) {
console.error('Ошибка при выполнении тестов:', err);
}
}
runTests();
Это делает интеграцию с современными сборщиками, такими как Webpack или Gulp, более удобной, позволяя запускать тесты как часть асинхронного пайплайна.
Programmatic API превращает Karma из инструмента командной строки в
мощный модуль для программного управления тестированием, обеспечивая
гибкость и контроль, недоступные при использовании стандартного запуска
через karma start.