Karma — это тестовый раннер для JavaScript, который обеспечивает запуск тестов в реальных браузерах, интеграцию с CI/CD и гибкую конфигурацию. Для работы требуется Node.js и npm. Установка производится через пакетный менеджер:
npm install --save-dev karma karma-cli
После установки глобального интерфейса karma-cli можно
инициализировать проект командой:
npx karma init
В процессе инициализации выбираются фреймворк тестирования (Jasmine, Mocha, QUnit), браузеры для запуска, настройки автоматического запуска тестов при изменении файлов и конфигурация отчетов о покрытии кода.
Конфигурационный файл karma.conf.js является ключевым
элементом, управляющим всеми аспектами работы Karma.
Файл karma.conf.js содержит свойство files,
которое определяет, какие файлы подключаются к тестовому окружению.
Синтаксис позволяет задавать порядок подключения,
использовать шаблоны и фильтры.
Пример базовой конфигурации:
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
files: [
'src/**/*.js',
'test/**/*.spec.js'
],
browsers: ['Chrome'],
singleRun: true
});
};
*, **).node_modules/angular/angular.js) следует
подключать до исходного кода и тестов, чтобы обеспечить правильную
инициализацию.Маски позволяют гибко подключать файлы без необходимости перечислять каждый файл вручную:
*.js — все JS-файлы в текущей папке.**/*.js — все JS-файлы рекурсивно в папке и её
подпапках.! перед маской исключает файлы из списка,
например:files: [
'src/**/*.js',
'!src/vendor/**/*.js'
]
Каждый элемент массива files может быть объектом с
дополнительными опциями:
files: [
{ pattern: 'src/**/*.js', watched: true, included: true, served: true },
{ pattern: 'test/data/*.json', watched: false, included: false, served: true }
]
true Karma перезапускает тесты при изменении.<script> в браузере. Обычно для исходного кода и
тестов true.<script>.
Используется для JSON или HTML-шаблонов.В сложных проектах порядок загрузки критичен. Например, сторонние библиотеки подключаются первыми, потом основной код, и только затем тесты:
files: [
'node_modules/jquery/dist/jquery.js',
'node_modules/lodash/lodash.js',
'src/**/*.js',
'test/**/*.spec.js'
]
При необходимости можно группировать файлы с помощью массивов объектов и явно указывать порядок зависимостей.
Karma может обслуживать не только скрипты, но и статические ресурсы:
files: [
{ pattern: 'test/fixtures/**/*.html', watched: true, included: false, served: true },
{ pattern: 'test/data/**/*.json', watched: true, included: false, served: true }
]
Важно: included: false гарантирует, что файл не будет
вставлен в DOM автоматически, а будет доступен только через HTTP-запрос
к Karma-серверу.
filesДля проектов с модулями ES или CommonJS порядок подключения можно контролировать через Karma и Webpack. Пример интеграции с Webpack:
files: [
{ pattern: 'test/**/*.spec.js', watched: false }
],
preprocessors: {
'test/**/*.spec.js': ['webpack']
}
Это позволяет Karma использовать Webpack для бандлинга модулей перед запуском тестов, сохраняя контроль над зависимостями.
ReferenceError.watched: true для тестовых файлов и
исходников, чтобы Karma автоматически перезапускал тесты.included и served.! в
масках.Файл karma.conf.js с корректно настроенным массивом
files обеспечивает стабильное, предсказуемое тестовое
окружение и позволяет масштабировать проект без проблем с загрузкой
зависимостей.