Karma — это тестовый раннер для JavaScript, который позволяет выполнять тесты в реальном браузере и интегрируется с различными фреймворками тестирования, такими как Jasmine, Mocha и QUnit. Управление зависимостями в Karma начинается с корректной установки и настройки проекта.
Для начала необходимо установить Karma и его CLI:
npm install --save-dev karma karma-cli
Далее устанавливаются фреймворки и браузеры, которые будут использоваться для тестирования:
npm install --save-dev karma-jasmine jasmine-core
npm install --save-dev karma-chrome-launcher
После установки создается конфигурационный файл
karma.conf.js, который задает ключевые параметры работы
Karma:
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
});
};
Важные моменты в конфигурации:
Все зависимости Karma, включая плагины и фреймворки, управляются
через package.json. Правильное разделение зависимостей на
dependencies и devDependencies критично:
"devDependencies": {
"karma": "^6.4.2",
"karma-cli": "^2.0.0",
"karma-jasmine": "^5.1.0",
"jasmine-core": "^4.6.0",
"karma-chrome-launcher": "^3.1.0"
}
Использование devDependencies позволяет держать рабочее
окружение проекта чистым, так как тестовые пакеты не включаются в
продакшен-бандл. Для установки всех зависимостей используется
команда:
npm install
Karma поддерживает большое количество плагинов для интеграции с различными инструментами:
Подключение плагинов выполняется через plugins в
конфигурационном файле, либо автоматически при наличии соответствующих
пакетов в node_modules.
plugins: [
'karma-jasmine',
'karma-chrome-launcher',
'karma-coverage'
]
Важная часть стабильной работы тестов — контроль версий зависимостей.
Использование символов ^ и ~ позволяет гибко
обновлять пакеты:
^6.4.2 — разрешает обновление до 6.x.x, не меняя
мажорную версию.~6.4.2 — разрешает обновление только патчей, до
6.4.x.Для фиксированных проектов может быть целесообразно использовать точные версии, чтобы избежать неожиданных конфликтов при обновлениях. Для проверки совместимости используется команда:
npm outdated
Karma работает с любыми модульными системами, включая CommonJS и ES Modules. Для проектов с Webpack или Rollup используется соответствующий плагин:
preprocessors: {
'src/**/*.js': ['webpack', 'sourcemap']
},
webpack: {
mode: 'development',
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: { presets: ['@babel/preset-env'] }
}
}
]
},
devtool: 'inline-source-map'
}
Такое подключение позволяет Karma правильно обрабатывать современные JavaScript-модули и транспилировать код для старых браузеров.
Для упрощения управления зависимостями часто используют скрипты в
package.json:
"scripts": {
"test": "karma start karma.conf.js",
"test:watch": "karma start karma.conf.js --auto-watch --no-single-run",
"update-deps": "npm update"
}
Команды npm run test и npm run test:watch
позволяют запускать тесты как однократно, так и в режиме наблюдения за
изменениями файлов, автоматически учитывая зависимости, установленные
через NPM.
В больших проектах Karma часто используется вместе с системами сборки и менеджерами пакетов для монорепозиториев, такими как Lerna или Nx. В таких случаях важно:
package-lock.json или
pnpm-lock.yaml) для воспроизводимости.karma-cli)
и локальные (плагины, фреймворки тестирования).Эти меры обеспечивают стабильное выполнение тестов на разных машинах и в CI/CD-пайплайнах.