Karma — это инструмент для запуска тестов JavaScript в реальных браузерах, разработанный командой AngularJS. Его основная цель — обеспечить автоматизированное тестирование в различных средах, что особенно важно для фронтенд-разработки, где поведение кода может различаться в зависимости от браузера.
Karma не выполняет тесты самостоятельно, а выступает тест-раннером, который координирует работу тестов в выбранных браузерах. Основные шаги работы Karma:
Такой подход позволяет видеть результаты тестирования в условиях реальных браузеров, включая Chrome, Firefox, Safari и даже мобильные эмуляторы.
karma-chrome-launcher,
karma-firefox-launcher.dots, progress,
junit.Конфигурация выполняется через файл karma.conf.js,
который представляет собой модуль Node.js с объектом настроек. Основные
опции:
frameworks — массив фреймворков, используемых для
написания тестов.files — список файлов и шаблонов, которые будут
загружены в браузеры.exclude — файлы, исключённые из тестирования.preprocessors — определение обработки файлов перед
тестами.reporters — формат вывода результатов.browsers — список браузеров для запуска.autoWatch — автоматическое отслеживание изменений в
файлах.singleRun — режим однократного запуска тестов (важно
для CI/CD).Пример базовой конфигурации:
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
files: [
'src/**/*.js',
'test/**/*.spec.js'
],
preprocessors: {
'src/**/*.js': ['coverage']
},
reporters: ['progress', 'coverage'],
browsers: ['ChromeHeadless'],
singleRun: true
});
};
Karma тесно взаимодействует с Webpack, Babel, TypeScript и системами непрерывной интеграции (Jenkins, GitHub Actions, GitLab CI). Preprocessors позволяют компилировать современный JavaScript или TypeScript перед тестированием, а использование headless-браузеров ускоряет выполнение тестов в CI-средах.
describe
и it, идеально подходит для поведения приложений.Karma не ограничивает выбор фреймворка, поэтому один и тот же проект может переключаться между ними без изменения логики тестов.
Karma поддерживает интеграцию с Istanbul, что позволяет отслеживать coverage (покрытие кода тестами). Вывод может быть как в консоль, так и в формате HTML, JSON или XML. Основные метрики покрытия:
ChromeHeadless, FirefoxHeadless) для CI,
чтобы ускорить тестирование.src) и тестовые
(test) с единообразной структурой.autoWatch только для локальной разработки,
избегая его в CI, чтобы не блокировать пайплайны.preprocessors для работы с современным
синтаксисом ES6+ и TypeScript.Karma остаётся ключевым инструментом в фронтенд-тестировании, обеспечивая надёжное выполнение тестов в реальных браузерах и гибкую интеграцию с современными процессами разработки.