Karma — это тестовый раннер для JavaScript, который обеспечивает выполнение тестов в реальных браузерах и позволяет интегрироваться с различными фреймворками, такими как Jasmine, Mocha или QUnit. Одним из ключевых компонентов Karma является система репортинга, которая отвечает за вывод результатов тестирования в удобной форме. JSON Reporter является мощным инструментом для автоматизации анализа тестов, интеграции с CI/CD и генерации кастомных отчетов.
JSON Reporter предоставляет структурированные данные о выполнении тестов в формате JSON. В отличие от стандартного текстового или HTML-отчета, JSON-формат позволяет:
Ключевое преимущество — возможность получать машиночитаемый формат с полной информацией о тестах, включая статус, ошибки и стек-трейсы.
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 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 позволяет гибко настроить вывод и интеграцию. Некоторые возможности:
Пример скрипта для анализа результатов:
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('; ')}`);
}
});
});
prettyPrint: true при локальном
тестировании для удобного чтения.stdout: false и писать
результаты в файл, чтобы избежать захламления логов.Handlebars или EJS для визуализации.JSON Reporter превращает результаты тестов в структурированные данные, которые можно использовать для автоматизации, мониторинга и визуализации. Такой подход особенно полезен при работе с большим количеством тестов и мультибраузерной средой.