Программная конфигурация

Karma — это тестовый раннер для JavaScript, который позволяет запускать тесты в реальных браузерах, обеспечивая точное воспроизведение поведения кода в среде пользователя. Основой работы Karma является конфигурационный файл karma.conf.js, в котором задаются все параметры тестирования: браузеры, фреймворки, файлы, плагины и отчёты.

Для установки Karma используется пакетный менеджер npm:

npm install --save-dev karma

После установки следует выбрать фреймворки для тестирования, например, Jasmine, Mocha или QUnit:

npm install --save-dev karma-jasmine jasmine-core

Для запуска тестов в браузерах требуется подключение соответствующих пакетов:

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

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

Файл karma.conf.js экспортирует объект с настройками. Основные ключевые параметры:

  • frameworks — массив тестовых фреймворков, например, ['jasmine'].
  • files — массив путей к тестируемым файлам и файлам тестов.
  • exclude — файлы или каталоги, которые следует игнорировать.
  • browsers — список браузеров, в которых будут запускаться тесты, например, ['Chrome', 'Firefox'].
  • plugins — подключаемые модули Karma.
  • reporters — типы отчётов о результатах тестов (progress, dots, coverage).
  • autoWatch — логическое значение: автоматически запускать тесты при изменении файлов.
  • singleRun — логическое значение: запускать тесты один раз и завершать процесс.

Пример базовой конфигурации:

module.exports = function(config) {
  config.set({
    frameworks: ['jasmine'],
    files: [
      'src/**/*.js',
      'test/**/*.spec.js'
    ],
    browsers: ['ChromeHeadless'],
    reporters: ['progress'],
    autoWatch: true,
    singleRun: false
  });
};

Подключение плагинов

Karma поддерживает множество плагинов для расширения функционала. Наиболее часто используются:

  • karma-coverage — генерация отчётов по покрытию кода.
  • karma-webpack — интеграция с Webpack для сборки модулей.
  • karma-sourcemap-loader — поддержка исходных карт для отладки.
  • karma-spec-reporter — удобный текстовый вывод результатов тестирования.

Плагины подключаются через поле plugins или автоматически, если установлены через npm. Например:

plugins: [
  'karma-jasmine',
  'karma-chrome-launcher',
  'karma-coverage'
]

Настройка отчётов и покрытия кода

Отчёты помогают отслеживать прогресс тестирования и качество кода. Karma поддерживает несколько типов:

  • progress — стандартный индикатор прогресса выполнения тестов.
  • dots — краткий вывод точками.
  • coverage — отчёт о покрытии кода, который генерируется плагином karma-coverage.

Пример конфигурации покрытия кода:

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

Использование разных браузеров

Karma позволяет тестировать код в нескольких браузерах одновременно. Для удобства часто используются headless-версии браузеров, которые запускаются без GUI, что ускоряет тестирование в CI/CD. Например:

browsers: ['ChromeHeadless', 'FirefoxHeadless']

Можно создавать кастомные конфигурации для браузеров:

customLaunchers: {
  ChromeHeadlessNoSandbox: {
    base: 'ChromeHeadless',
    flags: ['--no-sandbox', '--disable-gpu']
  }
}

Настройка наблюдения за файлами

Параметр autoWatch позволяет Karma отслеживать изменения в файлах и автоматически перезапускать тесты. В связке с singleRun: false это обеспечивает непрерывную проверку кода во время разработки. Для крупных проектов возможна фильтрация наблюдения:

autoWatchBatchDelay: 250, // задержка перед повторным запуском тестов после изменений

Интеграция с сборщиками и CI/CD

Karma легко интегрируется с Webpack, Gulp, Grunt и системами непрерывной интеграции, такими как Jenkins, GitHub Actions, GitLab CI. В связке с Webpack используется плагин karma-webpack для сборки модулей перед тестированием. Пример конфигурации:

preprocessors: {
  'src/**/*.js': ['webpack', 'sourcemap'],
  'test/**/*.spec.js': ['webpack']
},
webpack: {
  mode: 'development',
  devtool: 'inline-source-map',
  module: {
    rules: [
      { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' }
    ]
  }
}

Это позволяет запускать тесты с современным синтаксисом JavaScript и поддержкой модулей ES6.

Рекомендации по оптимизации конфигурации

  • Разделять конфигурации для локальной разработки и CI/CD.
  • Использовать headless-браузеры для ускорения тестов.
  • Настраивать отчёты о покрытии только при сборке на CI, чтобы ускорить локальные запуски.
  • Минимизировать количество одновременно подключаемых файлов для уменьшения времени старта Karma.

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