Karma — это тестовый раннер для JavaScript, разработанный с целью упрощения запуска тестов в реальных браузерах и обеспечением автоматической обратной связи при изменениях в коде. Он не предоставляет фреймворк для написания самих тестов, но работает в связке с такими инструментами, как Jasmine, Mocha, QUnit. Karma обеспечивает мост между кодом и браузером, автоматически выполняя тесты при изменении исходного кода и возвращая детальные отчёты о результатах.
Установка Karma производится через npm:
npm install --save-dev karma karma-cli
После установки создается конфигурационный файл:
npx karma init
Конфигурационный файл karma.conf.js включает основные
параметры:
['jasmine'].['Chrome', 'Firefox'].dots, progress, mocha и
т.д.).Пример конфигурации:
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
files: [
'src/**/*.js',
'test/**/*.spec.js'
],
browsers: ['Chrome'],
reporters: ['progress'],
autoWatch: true
});
};
Параметр frameworks определяет, какой тестовый фреймворк будет использоваться для написания и выполнения тестов. Karma поддерживает множество фреймворков, включая:
expect), позволяет писать
декларативные тесты.Использование фреймворка определяется в конфигурации Karma. Например, подключение Mocha выглядит так:
frameworks: ['mocha', 'chai']
Важно, что Karma не содержит встроенной логики для проверок или моков. Всё зависит от выбранного фреймворка. Karma лишь обеспечивает интеграцию с браузером и управление жизненным циклом тестов.
Karma позволяет одновременно использовать несколько фреймворков, что полезно при сложных проектах:
frameworks: ['mocha', 'chai', 'sinon']
Такое сочетание позволяет писать тесты гибко, чисто и модульно, не ограничиваясь функционалом одного фреймворка.
Karma легко интегрируется с системами сборки, такими как Webpack или Rollup, что позволяет использовать современные возможности ES6 и TypeScript. Для этого используются плагины:
karma-webpack — для обработки модулей через
Webpackkarma-typescript — для компиляции TypeScript перед
тестированиемПример конфигурации с Webpack:
module.exports = function(config) {
config.set({
frameworks: ['mocha', 'chai'],
files: [
'test/**/*.spec.js'
],
preprocessors: {
'test/**/*.spec.js': ['webpack']
},
webpack: {
mode: 'development',
module: {
rules: [
{ test: /\.js$/, loader: 'babel-loader' }
]
}
},
browsers: ['Chrome'],
reporters: ['progress']
});
};
files и
preprocessors — это ускоряет запуск тестов.progress для локальной разработки,
junit или coverage для CI.Karma в сочетании с правильным выбором фреймворка становится мощным инструментом для надёжного, быстрого и масштабируемого тестирования JavaScript-приложений, позволяя сосредоточиться на логике тестов, а не на инфраструктуре их выполнения.