Базовая конфигурация

Karma — это тестовый раннер для JavaScript, который позволяет запускать тесты в реальных браузерах. Основной способ его использования заключается в интеграции с тестовыми фреймворками, такими как Jasmine, Mocha или QUnit. Установка производится через npm:

npm install --save-dev karma karma-cli

После установки CLI-команды karma становятся доступными глобально. Инициализация конфигурационного файла выполняется командой:

npx karma init

В процессе инициализации требуется указать: используемый тестовый фреймворк, браузеры для запуска тестов, файлы с исходным кодом и тестами, а также дополнительные плагины. Результатом будет файл karma.conf.js, содержащий все настройки проекта.

Структура конфигурационного файла

Файл karma.conf.js — это JavaScript-модуль, экспортирующий функцию с объектом конфигурации:

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
  });
};

Ключевые параметры конфигурации:

  • basePath — корневая директория для поиска файлов.
  • frameworks — список тестовых фреймворков.
  • files — массив файлов или шаблонов для включения в тестовый процесс.
  • exclude — файлы, которые следует исключить.
  • preprocessors — определяет, какие файлы должны быть предварительно обработаны (например, транспиляция через Babel или покрытие кода).
  • reporters — способ отображения результатов тестов (progress, dots, coverage и другие).
  • port — порт для сервера Karma.
  • colors — включение цветного вывода.
  • logLevel — уровень логирования (LOG_DISABLE, LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG).
  • autoWatch — автоматический перезапуск тестов при изменении файлов.
  • browsers — список браузеров для запуска тестов (Chrome, Firefox, Safari, PhantomJS и др.).
  • singleRun — однократный запуск тестов и завершение работы.
  • concurrency — количество одновременных браузеров.

Интеграция с Babel и другими препроцессорами

Для современных проектов часто требуется транспиляция кода. Karma поддерживает подключение препроцессоров через karma-preprocessor. Например, настройка с Babel выглядит так:

preprocessors: {
  'src/**/*.js': ['babel'],
  'test/**/*.spec.js': ['babel']
},
babelPreprocessor: {
  options: {
    presets: ['@babel/preset-env'],
    sourceMap: 'inline'
  }
}

Препроцессоры позволяют работать с современным синтаксисом JavaScript и TypeScript, а также генерировать карты исходного кода для удобного отладки.

Настройка тестовых репортеров

Отчеты о тестировании можно гибко конфигурировать. Наиболее популярные варианты:

  • progress — отображает прогресс выполнения тестов.
  • dots — выводит результат каждого теста точками.
  • coverage — интеграция с инструментами анализа покрытия кода.

Пример использования отчета о покрытии:

reporters: ['progress', 'coverage'],
coverageReporter: {
  type: 'html',
  dir: 'coverage/'
}

HTML-отчет позволяет визуально оценивать покрытие каждого файла.

Выбор и настройка браузеров

Karma запускает тесты в реальных браузерах. Для каждого браузера необходимо установить соответствующий плагин:

npm install --save-dev karma-chrome-launcher karma-firefox-launcher

В конфигурации указывается список браузеров:

browsers: ['ChromeHeadless', 'FirefoxHeadless']

Использование режима Headless удобно для CI/CD-процессов, так как не требует визуального интерфейса браузера.

Автоматизация и Watch Mode

Параметр autoWatch в сочетании с singleRun позволяет настроить режим постоянного отслеживания изменений файлов и автоматического перезапуска тестов:

autoWatch: true,
singleRun: false

Для CI/CD лучше использовать:

autoWatch: false,
singleRun: true

Это обеспечивает однократное выполнение тестов и корректный выход из процесса, что необходимо для автоматизированных сборок.

Настройка логирования и портов

Karma включает встроенный сервер для запуска тестов. Параметр port задаёт порт сервера, а logLevel регулирует детализацию вывода. Часто используется LOG_INFO для стандартного уровня или LOG_DEBUG для детальной отладки.

port: 9876,
logLevel: config.LOG_INFO

Многопоточность и параллельное выполнение

Параметр concurrency контролирует количество одновременно запущенных браузеров:

concurrency: 3

Это ускоряет выполнение тестов при наличии нескольких браузеров и доступных ресурсов, особенно в проектах с большим количеством тестов.

Итоговая структура базовой конфигурации

Базовая конфигурация Karma объединяет следующие элементы:

  1. Инициализация проекта и подключение фреймворка тестирования.
  2. Указание файлов исходного кода и тестов.
  3. Настройка препроцессоров для поддержки современного синтаксиса.
  4. Выбор браузеров и режима их запуска.
  5. Конфигурация репортеров и логирования.
  6. Автоматизация запуска тестов и режим Watch.
  7. Управление многопоточностью и параметрами сервера.

Такой подход обеспечивает стабильное и воспроизводимое тестирование JavaScript-кода на любом этапе разработки.