Single run режим

Single run режим — это режим выполнения тестов, при котором Karma запускает тесты один раз и завершает работу. Он особенно полезен для интеграции с системами непрерывной интеграции (CI/CD), где требуется автоматическая проверка кода без постоянного слежения за изменениями файлов.

Основные особенности

  • Однократный запуск тестов. Karma инициирует браузеры, выполняет все тесты и возвращает результат. После завершения процесс тестирования завершается автоматически.
  • Выходной код. Режим single run возвращает код завершения процесса: 0 при успешном выполнении всех тестов, ненулевой код при наличии ошибок. Это позволяет автоматизировать проверки в скриптах сборки.
  • Отсутствие слежения за файлами. Karma не следит за изменениями в исходных файлах или тестах, что ускоряет выполнение тестов по сравнению с watch-режимом.

Настройка в конфигурационном файле

В файле karma.conf.js режим single run настраивается с помощью параметра singleRun:

module.exports = function(config) {
  config.set({
    frameworks: ['jasmine'], // или 'mocha', 'qunit'
    files: [
      'src/**/*.js',
      'test/**/*.spec.js'
    ],
    browsers: ['ChromeHeadless'], // рекомендуемый браузер для CI
    singleRun: true,
    reporters: ['progress', 'coverage'],
    preprocessors: {
      'src/**/*.js': ['coverage']
    },
    coverageReporter: {
      type: 'lcov',
      dir: 'coverage/'
    }
  });
};

Ключевые моменты настройки:

  • browsers: чаще всего используется ChromeHeadless или FirefoxHeadless, чтобы запускать тесты в безголовом режиме, без графического интерфейса. Это критично для CI.
  • reporters: рекомендуется включать как минимум progress для отображения статуса выполнения и coverage для отчётов по покрытию кода.
  • preprocessors: позволяют подключить инструменты для анализа кода, например, для измерения покрытия тестами.

Использование через командную строку

Single run можно запускать напрямую из терминала:

karma start karma.conf.js --single-run

или через npm-скрипт:

{
  "scripts": {
    "test": "karma start --single-run"
  }
}

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

Взаимодействие с CI/CD

Single run идеально подходит для пайплайнов:

  1. Установка зависимостей:

    npm ci
  2. Запуск тестов:

    npm run test
  3. Обработка результатов: ненулевой код выхода автоматически сигнализирует о неуспешном прохождении тестов, что предотвращает деплой дефектного кода.

Особенности поведения

  • Если в тестах используются асинхронные операции, Karma корректно дожидается их завершения перед завершением процесса.
  • Возможность параллельного запуска нескольких браузеров ускоряет выполнение тестов в больших проектах.
  • Параметр autoWatch игнорируется в single run режиме, так как слежение за файлами отключено.

Рекомендации по использованию

  • Для локальной разработки чаще удобнее включать watch-режим (autoWatch: true) для непрерывного запуска тестов при изменении файлов.
  • Для сборочных серверов всегда использовать singleRun: true вместе с headless-браузерами.
  • Покрытие кода лучше формировать именно в single run режиме, чтобы результаты отражали полный набор тестов без влияния изменений после первого запуска.

Single run режим обеспечивает стабильность и предсказуемость выполнения тестов, делает процесс интеграции с CI/CD эффективным и позволяет легко отслеживать результаты тестирования.