Karma — это тестовый раннер для JavaScript, предназначенный для запуска тестов в реальных браузерах. Его ключевая особенность заключается в способности интегрироваться с различными фреймворками тестирования, обеспечивая автоматическое выполнение тестов и мгновенную обратную связь. Karma не является фреймворком для написания тестов, а выступает как инструмент для запуска, наблюдения и отчётности тестов, позволяя использовать такие библиотеки, как Jasmine, Mocha, QUnit и другие.
Основные функции Karma включают:
Karma строит свою работу вокруг конфигурационного файла
karma.conf.js. В нём указываются браузеры, тестовые
фреймворки, плагины и пути к тестовым файлам. Пример
конфигурации для Jasmine:
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
files: [
'src/**/*.js',
'test/**/*.spec.js'
],
reporters: ['progress', 'coverage'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['ChromeHeadless'],
singleRun: false,
concurrency: Infinity
});
};
Ключевые моменты конфигурации:
frameworks: указывает фреймворк для написания тестов.
Karma не ограничивается одним вариантом, возможно подключение
нескольких.files: задаёт порядок загрузки файлов, что критично для
совместимости с зависимостями.reporters: позволяет видеть результаты тестов в удобном
формате, а также интегрировать отчёты покрытия кода.browsers: список браузеров, в которых будут запускаться
тесты, включая headless-режимы для CI.Jasmine — один из самых популярных фреймворков, использующихся вместе
с Karma. Он обеспечивает BDD-подход к тестированию,
предоставляя функции describe, it,
beforeEach, afterEach. Karma не вмешивается в
написание тестов, но позволяет запускать их сразу в разных
браузерах.
Пример совместного использования Karma и Jasmine:
describe('Calculator', function() {
let calc;
beforeEach(function() {
calc = new Calculator();
});
it('должен корректно складывать числа', function() {
expect(calc.add(2, 3)).toBe(5);
});
it('должен корректно вычитать числа', function() {
expect(calc.subtract(5, 3)).toBe(2);
});
});
Особенности взаимодействия:
*.spec.js.done() или
промисы.Mocha предоставляет гибкий движок тестирования, а Chai — библиотеку для утверждений. Karma позволяет использовать их совместно, добавляя в конфигурацию:
frameworks: ['mocha', 'chai']
Пример теста:
describe('Array', function() {
it('должен содержать элемент после добавления', function() {
const arr = [];
arr.push(1);
arr.should.include(1);
});
});
Особенности совместимости:
should, expect, assert.Karma строится на модульной архитектуре плагинов. Основные типы плагинов:
karma-chrome-launcher,
karma-firefox-launcher.karma-jasmine,
karma-mocha, karma-qunit.karma-coverage,
karma-spec-reporter.karma-webpack,
karma-babel-preprocessor.Плагины позволяют объединять разные фреймворки и инструменты покрытия кода, обеспечивая гибкость и масштабируемость тестовой среды.
В больших проектах может потребоваться использовать несколько фреймворков одновременно. Karma поддерживает такую конфигурацию, однако важно учитывать:
frameworks критичен для
правильного разрешения зависимостей.describe,
it) возможны, поэтому рекомендуется определять
namespace или использовать адаптеры.Пример конфигурации с Jasmine и Mocha:
frameworks: ['jasmine', 'mocha', 'chai']
Такой подход позволяет:
autoWatch для локальной разработки и
singleRun для CI.Karma выступает как связующее звено, которое позволяет объединять экосистему тестирования JavaScript, сохраняя контроль над запуском тестов, браузерной совместимостью и отчётностью, независимо от выбора фреймворка для написания самих тестов.