JSON reporter

Karma — это тестовый раннер для JavaScript, который обеспечивает выполнение тестов в реальных браузерах и позволяет интегрироваться с различными фреймворками, такими как Jasmine, Mocha или QUnit. Одним из ключевых компонентов Karma является система репортинга, которая отвечает за вывод результатов тестирования в удобной форме. JSON Reporter является мощным инструментом для автоматизации анализа тестов, интеграции с CI/CD и генерации кастомных отчетов.


Основные возможности JSON Reporter

JSON Reporter предоставляет структурированные данные о выполнении тестов в формате JSON. В отличие от стандартного текстового или HTML-отчета, JSON-формат позволяет:

  • Легко парсить результаты тестов с помощью скриптов.
  • Интегрировать тестирование в CI/CD пайплайны (Jenkins, GitLab CI, GitHub Actions).
  • Генерировать собственные HTML или PDF отчеты на основе JSON.
  • Сохранять результаты в базу данных или отправлять на удаленные сервисы для анализа.

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


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

JSON Reporter не является встроенным по умолчанию. Для его использования необходимо установить отдельный npm-пакет:

npm install karma-json-reporter --save-dev

После установки требуется подключить репортер в конфигурации Karma:

module.exports = function(config) {
  config.set({
    frameworks: ['jasmine'],
    files: [
      'src/**/*.js',
      'test/**/*.spec.js'
    ],
    reporters: ['progress', 'json'],
    jsonReporter: {
      stdout: false, // вывод в консоль
      outputFile: 'test-results.json', // путь к файлу
      prettyPrint: true // читаемое форматирование
    },
    browsers: ['ChromeHeadless'],
    singleRun: true
  });
};

Объяснение параметров:

  • stdout — если true, результаты будут выводиться в консоль.
  • outputFile — путь и имя файла, в который будут сохранены результаты.
  • prettyPrint — форматирование JSON с отступами для лучшей читаемости.

Структура JSON отчета

JSON, формируемый JSON Reporter, содержит подробные данные о каждом тесте. Пример структуры:

{
  "total": 5,
  "success": 4,
  "failed": 1,
  "browsers": [
    {
      "name": "Chrome 112.0.5615",
      "total": 5,
      "success": 4,
      "failed": 1,
      "skipped": 0,
      "tests": [
        {
          "description": "должен правильно складывать числа",
          "suite": ["Calculator"],
          "success": true,
          "time": 5
        },
        {
          "description": "должен выбрасывать ошибку при делении на ноль",
          "suite": ["Calculator"],
          "success": false,
          "time": 3,
          "log": ["Expected exception not thrown"]
        }
      ]
    }
  ]
}

Ключевые поля:

  • total, success, failed — общее количество тестов и их статус.
  • browsers — массив с результатами выполнения для каждого браузера.
  • tests — подробные сведения о каждом тесте, включая описание, время выполнения и ошибки.

Настройка кастомных отчетов

JSON Reporter позволяет гибко настроить вывод и интеграцию. Некоторые возможности:

  1. Группировка по браузерам: удобна при тестировании в нескольких средах.
  2. Фильтрация тестов: можно исключить пропущенные или успешные тесты для анализа только ошибок.
  3. Интеграция с CI/CD: JSON можно отправлять на сервер для автоматического построения графиков или уведомлений.

Пример скрипта для анализа результатов:

const fs = require('fs');

const results = JSON.parse(fs.readFileSync('test-results.json', 'utf-8'));

results.browsers.forEach(browser => {
  console.log(`Браузер: ${browser.name}`);
  browser.tests.forEach(test => {
    if (!test.success) {
      console.log(`Ошибка в тесте: ${test.description}`);
      console.log(`Лог: ${test.log.join('; ')}`);
    }
  });
});

Советы по использованию JSON Reporter

  • Всегда включать prettyPrint: true при локальном тестировании для удобного чтения.
  • Для CI/CD использовать stdout: false и писать результаты в файл, чтобы избежать захламления логов.
  • При большом количестве тестов рекомендуется разбивать JSON по браузерам или тестовым пакетам для ускорения анализа.
  • JSON легко конвертировать в HTML с помощью библиотек типа Handlebars или EJS для визуализации.

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