Spec reporter

Spec Reporter — это один из самых информативных репортеров в Karma, позволяющий получать детализированные отчёты о результатах тестов. Он выводит результаты каждого отдельного spec (тестового примера), а не только суммарную статистику по файлам или сьютам. Такой подход особенно полезен при разработке сложных приложений с большим количеством модульных тестов, где важно видеть, какие именно тесты прошли, а какие — нет.


Установка и подключение

Для использования Spec Reporter необходимо установить пакет karma-spec-reporter:

npm install karma-spec-reporter --save-dev

После установки репортер подключается в конфигурационном файле Karma (karma.conf.js):

module.exports = function(config) {
  config.set({
    frameworks: ['jasmine'], // или другой фреймворк
    files: [
      'src/**/*.js',
      'test/**/*.spec.js'
    ],
    reporters: ['spec'],
    specReporter: {
      maxLogLines: 5,             // Максимум строк логов на проваленный тест
      suppressErrorSummary: false, // Не скрывать суммарную ошибку
      suppressFailed: false,       // Показывать проваленные тесты
      suppressPassed: false,       // Показывать прошедшие тесты
      suppressSkipped: true,       // Не показывать пропущенные тесты
      showSpecTiming: true,        // Показывать время выполнения теста
      failFast: false              // Остановить выполнение при первой ошибке
    },
    browsers: ['ChromeHeadless'],
    singleRun: true
  });
};

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

  • maxLogLines — ограничение вывода логов на тест, полезно для длинных сообщений.
  • suppressErrorSummary — управляет показом сводного отчёта о неудачных тестах.
  • suppressFailed и suppressPassed — позволяют скрывать или показывать тесты в выводе.
  • showSpecTiming — отображение времени выполнения каждого теста, что помогает оптимизировать медленные участки кода.
  • failFast — остановка тестов после первой ошибки, удобна для локальной разработки.

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

Spec Reporter выводит результат каждого теста по мере его выполнения. Для каждой suite (группы тестов) он показывает:

  • Название сьюта.
  • Название каждого теста внутри сьюта.
  • Статус теста: пройден (PASSED), провален (FAILED) или пропущен (SKIPPED).
  • Дополнительные логи ошибок и стек-трейс для упавших тестов.
  • Время выполнения теста, если showSpecTiming включен.

Пример вывода:

Calculator
  add()
    ✓ должно складывать два числа (5ms)
  subtract()
    ✗ должно вычитать два числа (3ms)
      Expected 1 to equal 2.

Такой формат облегчает поиск проблем и делает отчёт прозрачным для командной работы.


Интеграция с CI/CD

Spec Reporter отлично подходит для непрерывной интеграции, так как его текстовый формат легко читается в логах Jenkins, GitLab CI, GitHub Actions и других систем. В отличие от стандартного progress-репортера, он выводит полные сведения о каждом тесте, что позволяет быстро выявлять нестабильные или медленные тесты.

Для CI рекомендуется:

  • Включить suppressPassed: true для сокращения объёма логов.
  • Включить failFast: true для ускорения сборки при критических ошибках.
  • Использовать maxLogLines для ограничения длинных логов и удобства чтения.

Совместимость и ограничения

Spec Reporter поддерживает все популярные фреймворки тестирования, которые интегрируются с Karma: Jasmine, Mocha, QUnit. Однако стоит учитывать несколько моментов:

  • Для очень больших проектов вывод всех тестов может быть громоздким. В таких случаях имеет смысл использовать фильтрацию по suppressPassed или делить тесты на пакеты.
  • Репортер не визуализирует тесты графически — он выводит только текстовый лог. Для визуального контроля стоит комбинировать с karma-html-reporter.
  • Время выполнения отображается для каждого теста, но суммарное время сьюта рассчитывается Karma, а не Spec Reporter.

Советы по эффективному использованию

  • Локальная разработка: оставлять suppressPassed: false и showSpecTiming: true, чтобы видеть каждый тест и его скорость выполнения.
  • CI/CD: включить suppressPassed: true и failFast: true, чтобы ускорить сборку и концентрироваться только на проблемных тестах.
  • Отладка ошибок: использовать maxLogLines для ограничения вывода длинных логов, чтобы избежать засорения терминала.

Spec Reporter превращает работу с Karma из простого «тест прошёл/не прошёл» в детализированную аналитику тестирования, позволяя отследить каждый отдельный сценарий и оптимизировать процесс разработки. Его текстовый формат лёгок для интеграции с любыми системами и помогает быстро находить узкие места в тестируемом коде.