Анатомия конфигурационного файла

Файл настроек Karma служит точкой концентрации параметров, определяющих способ выполнения тестов, используемые фреймворки, плагины, браузеры и формат отчетов. Его основа — объект конфигурации, экспортируемый в формате CommonJS. Типичное имя файла: karma.conf.js.


Структура экспорта

Экспортируемая функция принимает объект config, на котором вызывается метод set. Внутри метода передается объект с ключами настройки. Такой подход позволяет динамически модифицировать параметры, например, в зависимости от окружения.

module.exports = function (config) {
  config.set({
    // параметры
  })
}

Параметры окружения выполнения

basePath определяет корневой путь, относительно которого рассчитываются остальные директории и пути к файлам. Он может влиять на удобство подключения источников и тестов.

frameworks задает тестовые фреймворки и адаптеры, например jasmine, mocha, chai и их комбинации. Karma импортирует соответствующие плагины и связывает их между собой.

files представляет список файлов или шаблонов путей, подключаемых в браузер. Помимо тестов и исходных модулей сюда включаются вспомогательные утилиты, фикстуры или сторонние библиотеки. Поддерживаются шаблоны и опции вроде included и served.

exclude означает список путей, исключаемых из загрузки.


Дополнительные ключи для обработки файлов

Файл конфигурации позволяет подключать предварительные обработчики с помощью ключа preprocessors. Значения обычно указывают на трансформацию исходников перед запуском тестов: компиляцию TypeScript, трансформацию Babel, покрытие кода инструментом Istanbul.

preprocessors: {
  'src/**/*.js': ['babel', 'coverage']
}

Управление браузерами

Ключ browsers определяет список браузеров, в которых будут выполняться тесты. Допустимо использовать встроенные лаунчеры (Chrome, Firefox) или кастомные (ChromeHeadless, PhantomJS). Поддерживается одновременный запуск в нескольких окружениях.

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


Формирование отчетов

Ключ reporters задает формат вывода результатов: progress, dots, junit, coverage и другие. Отчеты покрытия обычно требуют дополнительной настройки, включая директорию для артефактов и тип генерации (LCOV, HTML, текстовый).

reporters: ['progress', 'coverage']
coverageReporter: {
  dir: 'coverage/',
  reporters: [
    { type: 'html', subdir: 'html' },
    { type: 'text-summary' }
  ]
}

Настройки серверной части

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

logLevel управляет степенью детализации логов: от LOG_DISABLE до LOG_DEBUG. Это полезно при диагностике плагинов и сетевых проблем.

colors включает цветовое оформление вывода.


Поведение при CI-запусках

Для непрерывной интеграции критичен ключ singleRun. При значении true Karma запускает тесты один раз и завершает процесс. В связке с headless-браузерами это обеспечивает детерминированное выполнение без графического интерфейса.


Загрузка и регистрация плагинов

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


Взаимодействие с webpack и другими сборщиками

Через preprocessors и дополнительные плагины конфигурация может связываться с webpack, Rollup или другими сборщиками. В случае webpack ключ webpack вкладывается внутрь конфигурации Karma и перенаправляет обработку файлов. Для корректной работы требуется указать webpackMiddleware, контролирующий вывод статистики.


Опциональные параметры надежности

captureTimeout, browserNoActivityTimeout и browserDisconnectTolerance помогают управлять ошибками связности между браузером и Karma. Эти параметры становятся значимыми в распределенных средах или при нестабильной сети.


Ключевые моменты

  • Конфигурация организована вокруг объекта config.set.
  • Механизм плагинов и препроцессоров расширяет базовый функционал.
  • Параметры для CI-запусков отличаются от параметров живого режима разработки.
  • Важна согласованность путей, окружения и отчетов покрытия для воспроизводимости результатов.