Karma — это тестовый раннер для JavaScript, который интегрируется с различными фреймворками тестирования, такими как Jasmine, Mocha и QUnit. Для запуска тестов в браузере Chrome требуется правильная конфигурация, чтобы обеспечить корректное выполнение и отладку кода.
Для работы с Chrome в Karma требуется установить несколько npm-пакетов:
npm install --save-dev karma karma-chrome-launcher karma-jasmine jasmine-core
karma.conf.jsКонфигурационный файл является центром управления поведением Karma. Пример минимальной настройки для Chrome:
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
});
};
Ключевые моменты конфигурации:
frameworks — указывает используемый тестовый
фреймворк.files — список файлов для загрузки в браузер перед
запуском тестов.browsers — браузеры, в которых будут выполняться тесты.
Можно указать 'ChromeHeadless' для безголового режима.autoWatch — автоматическое отслеживание изменений в
файлах и повторный запуск тестов.singleRun — определяет, будет ли Karma запускаться один
раз или оставаться в режиме наблюдения.Для запуска тестов используется команда:
npx karma start
При этом открывается окно Chrome (или безголовая версия ChromeHeadless) и выполняются все указанные тесты. В терминале выводится статус выполнения: количество успешных и провалившихся тестов, а также подробные сообщения об ошибках.
customLaunchers можно передавать специфические флаги
Chrome, например:customLaunchers: {
ChromeDebug: {
base: 'Chrome',
flags: ['--remote-debugging-port=9222']
}
}
Это позволяет подключаться к Chrome через DevTools и отлаживать тесты пошагово.
Karma в связке с Chrome предоставляет полноценные возможности отладки:
console.log и ошибок
доступен в DevTools, что облегчает анализ проблем.Для отладки в ChromeHeadless нужно включить режим с удалённым портом:
customLaunchers: {
ChromeHeadlessDebug: {
base: 'ChromeHeadless',
flags: ['--remote-debugging-port=9222']
}
}
После этого можно подключиться к chrome://inspect и
использовать DevTools для пошаговой отладки тестов, как в обычном
браузере.
В JavaScript тестах часто встречается асинхронный код, особенно при
работе с промисами или таймерами. В Karma с Jasmine это обрабатывается
через функции done или async/await:
it('должен вернуть данные после задержки', async () => {
const result = await fetchData();
expect(result).toBe('data');
});
Использование DevTools позволяет:
Karma позволяет настраивать формат вывода тестов и интегрировать плагины для расширенных отчётов:
karma-spec-reporter — показывает
пошаговый статус каждого теста.karma-coverage — генерирует отчёт о
покрытии кода тестами.karma-junit-reporter — позволяет
интегрироваться с CI-системами и экспортировать результаты в XML.Пример подключения плагина для покрытия кода:
preprocessors: {
'src/**/*.js': ['coverage']
},
reporters: ['progress', 'coverage'],
coverageReporter: {
type: 'html',
dir: 'coverage/'
}
Это создаёт удобные визуальные отчёты, которые можно открыть в браузере и увидеть процент покрытия каждой функции, строки и блока кода.
autoWatch при активной разработке, чтобы
тесты запускались автоматически после изменений кода.--remote-debugging-port для
сложной отладки асинхронного кода и анализа ошибок.files,
чтобы ускорить запуск тестов и избежать конфликтов зависимостей.Karma в связке с Chrome и DevTools создаёт мощную среду для тестирования JavaScript, обеспечивая как автоматизацию, так и детальную отладку на уровне браузера.