Karma является инструментом для запуска тестов JavaScript в реальных браузерах, обеспечивая точность проверки кода в условиях, максимально приближенных к рабочей среде. Для начала необходимо установить Karma и его CLI через npm:
npm install --save-dev karma karma-cli
После установки создается конфигурационный файл
karma.conf.js, который задает поведение тестового
окружения. Его можно сгенерировать командой:
npx karma init
В конфигурационном файле указываются ключевые параметры:
jasmine, mocha.Karma не выполняет компиляцию самостоятельно, для этого используются препроцессоры. Наиболее часто применяются:
karma-webpack — интеграция с Webpack для сборки
модулей.karma-babel-preprocessor — трансформация кода через
Babel, поддержка современных стандартов ECMAScript.karma-typescript — компиляция TypeScript в JavaScript
перед запуском тестов.Пример настройки препроцессора с Webpack:
preprocessors: {
'src/**/*.js': ['webpack'],
'test/**/*.spec.js': ['webpack']
},
webpack: {
mode: 'development',
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
}
Ключевой момент: препроцессоры выполняются до запуска тестов и позволяют Karma работать с любым современным синтаксисом и модулями.
При тестировании важно объединить все модули и зависимости в единый бандл, чтобы браузер мог корректно их загрузить. Webpack является наиболее популярным инструментом для этой задачи.
Основные шаги бандлинга в Karma:
entry и output в
Webpack-конфиге, где точкой входа являются тестовые файлы.karma-webpack, чтобы
сборка происходила перед запуском тестов.Пример интеграции:
const webpackConfig = require('./webpack.config');
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
files: [
'test/**/*.spec.js'
],
preprocessors: {
'test/**/*.spec.js': ['webpack']
},
webpack: webpackConfig,
reporters: ['progress'],
browsers: ['ChromeHeadless']
});
};
Для ускорения тестирования важно минимизировать время компиляции:
cache: { type: 'filesystem' }).include
и exclude.devtool: 'inline-source-map').Совет: при большом проекте рекомендуется отдельный Webpack-конфиг для тестов, содержащий только необходимые лоадеры и минимальные оптимизации. Это сокращает время сборки и уменьшает сложность конфигурации.
TypeScript требует особого внимания, так как тесты и исходный код должны быть транспилированы в JavaScript. Karma поддерживает несколько подходов:
Пример конфигурации с ts-loader:
module: {
rules: [
{
test: /\.ts$/,
use: 'ts-loader',
exclude: /node_modules/
}
]
}
Файлы тестов подключаются как *.spec.ts, и Webpack
собирает их в единый бандл.
Тесты иногда требуют подключение CSS, изображений или других ресурсов. Для этого Karma и Webpack используют специальные лоадеры:
style-loader + css-loader для CSS.file-loader или url-loader для
изображений.Пример:
module: {
rules: [
{ test: /\.css$/, use: ['style-loader', 'css-loader'] },
{ test: /\.(png|jpg|gif)$/, type: 'asset/resource' }
]
}
Ассеты автоматически включаются в бандл, что позволяет тестам работать без ошибок загрузки файлов.
Karma, интегрированная с современными инструментами сборки, позволяет:
Грамотная конфигурация препроцессоров и бандлинга — ключ к стабильному и предсказуемому запуску тестов, особенно в крупных проектах с модульной архитектурой.