Progress reporter

Progress reporter — один из встроенных репортеров Karma, который отображает прогресс выполнения тестов в реальном времени. Основная цель прогресс репортера — визуально информировать о состоянии тестового запуска, показывая количество выполненных, прошедших и упавших тестов. Он особенно полезен при запуске большого набора тестов, когда необходимо отслеживать прогресс без задержек на формирование итоговых отчетов.


Принцип работы

Progress reporter выводит короткую строку статуса в консоль после каждого выполненного теста. В стандартной конфигурации он использует символы:

  • . (точка) — успешное выполнение теста
  • F — проваленный тест
  • * — тест с ошибкой, не завершившийся корректно

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


Настройка в конфигурации Karma

Для использования progress reporter необходимо в файле конфигурации karma.conf.js в массив reporters добавить строку 'progress':

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

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

  • frameworks — фреймворк для тестирования (jasmine, mocha, qunit и т. д.).
  • files — список файлов исходного кода и тестов, которые будут подключены.
  • reporters — массив репортеров, где 'progress' отвечает за отображение прогресса.
  • browsers — список браузеров для запуска тестов.
  • singleRun — при значении true тесты запускаются один раз и процесс завершает работу после выполнения.

Особенности отображения прогресса

Progress reporter особенно информативен при следующих сценариях:

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

  2. Параллельное выполнение тестов В конфигурациях с несколькими браузерами progress reporter показывает отдельные потоки выполнения через префиксы или разные линии, что позволяет отслеживать прогресс каждого браузера.

  3. Интеграция с CI/CD В системах непрерывной интеграции вывод progress reporter сохраняет компактность логов, предотвращая их перегрузку. Для подробного анализа можно комбинировать progress с другими репортерами, например, junit или coverage.


Ограничения и расширения

Progress reporter является минималистичным инструментом и не предоставляет подробной информации о каждом тесте (например, стек-трейсы или тайминги). Для расширенной диагностики рекомендуется использовать:

  • Spec reporter — выводит названия тестов и их статусы построчно.
  • Coverage reporter — отображает покрытие кода тестами.

В некоторых проектах progress reporter комбинируют с цветной подсветкой консоли, что улучшает восприятие информации о тестах.


Кастомизация

Karma позволяет создавать собственные репортеры на основе встроенных. Progress reporter можно расширить, например, для отображения процентного прогресса или времени выполнения тестов:

const ProgressReporter = function(baseReporterDecorator) {
  baseReporterDecorator(this);
  
  this.onSpecCompl ete = function(browser, result) {
    process.stdout.write('.');
  };
  
  this.onRunCompl ete = function(browsers, results) {
    console.log(`\nTotal tests: ${results.success + results.failed}`);
    console.log(`Passed: ${results.success}, Failed: ${results.failed}`);
  };
};

ProgressReporter.$inject = ['baseReporterDecorator'];

module.exports = {
  reporters: ['progress', {'reporter:customProgress': ['type', ProgressReporter]}]
};

Такой подход позволяет добавлять дополнительные метрики, сохраняя компактный вывод progress reporter.


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

  • При локальной разработке progress reporter помогает быстро увидеть, есть ли ошибки после внесения изменений.
  • В сборочных скриптах для CI/CD минималистичный вывод ускоряет чтение логов.
  • В сочетании с другими репортерами обеспечивает баланс между информативностью и компактностью отчета.

Progress reporter в Karma является базовым, но важным инструментом для отслеживания состояния тестового прогресса. Его простота и наглядность делают его незаменимым для ежедневного тестирования и интеграции в автоматические сборки.