Karma является популярным тестовым раннером для JavaScript, обеспечивающим автоматическое выполнение тестов в браузерах. Для интеграции с современными сборщиками модулей, такими как Webpack, используется плагин karma-webpack, который позволяет обрабатывать модули и ресурсы так же, как при обычной сборке приложения. Это особенно важно для проектов с использованием ES6, TypeScript или CSS-модулей.
Для корректной работы необходимо установить несколько пакетов:
npm install --save-dev karma karma-webpack webpack webpack-cli
karma — основной тестовый раннер.karma-webpack — интеграция Webpack с Karma,
обеспечивает правильную сборку тестов.webpack и webpack-cli — сам сборщик и его
CLI для конфигурации.Дополнительно может понадобиться:
npm install --save-dev karma-jasmine jasmine-core karma-chrome-launcher
karma-jasmine — фреймворк для написания тестов на
Jasmine.jasmine-core — сам Jasmine.karma-chrome-launcher — запуск тестов в браузере
Chrome.При использовании TypeScript потребуется также:
npm install --save-dev ts-loader typescript
Файл конфигурации обычно называется karma.conf.js.
Основные параметры для работы с karma-webpack:
const path = require('path');
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
files: [
'test/**/*.spec.js'
],
preprocessors: {
'test/**/*.spec.js': ['webpack']
},
webpack: {
mode: 'development',
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
},
resolve: {
extensions: ['.js']
}
},
webpackMiddleware: {
stats: 'errors-only'
},
reporters: ['progress'],
browsers: ['ChromeHeadless'],
singleRun: true
});
};
Ключевые моменты:
files — указываются тестовые файлы.preprocessors — для файлов указывается обработчик
webpack.webpack — объект с конфигурацией Webpack, аналогичный
обычной сборке приложения.webpackMiddleware.stats — уменьшает вывод информации в
консоль, оставляя только ошибки.browsers — можно использовать любой установленный
браузер; чаще применяется ChromeHeadless для CI/CD.karma-webpack позволяет использовать:
css-loader, sass-loader).file-loader или url-loader.Пример правила для CSS:
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
Это позволяет импортировать CSS прямо в тестируемые модули и корректно их обрабатывать при запуске тестов.
Для TypeScript необходимо добавить ts-loader и расширить
конфигурацию Webpack:
module: {
rules: [
{
test: /\.ts$/,
exclude: /node_modules/,
use: 'ts-loader'
}
]
},
resolve: {
extensions: ['.ts', '.js']
}
А в files указывать тесты с расширением
.ts:
files: ['test/**/*.spec.ts']
webpack-dev-middleware через
webpackMiddleware снижает нагрузку на запуск тестов.singleRun: true отключает постоянный режим
наблюдения и ускоряет CI-сборки.karma-sourcemap-loader для генерации
source map, что облегчает отладку тестов:npm install --save-dev karma-sourcemap-loader
И добавлять в preprocessors:
'test/**/*.spec.js': ['webpack', 'sourcemap']
Использование karma-webpack делает тестирование
модульных приложений максимально приближённым к реальному окружению,
облегчает интеграцию с CI/CD и обеспечивает корректное выполнение тестов
для современных фронтенд-проектов.