Jasmine предоставляет встроенные средства для организации и форматирования вывода результатов тестирования, что важно для восприятия информации и анализа тестов. В этой главе будут рассмотрены основные способы настройки вывода, а также оптимизация отображения результатов для различных потребностей разработчиков и команд тестирования.
По умолчанию Jasmine выводит информацию о прохождении тестов в консоль, где отображаются:
Пример стандартного вывода:
Suite: Example Suite
✓ should add numbers correctly
✗ should subtract numbers correctly
Expected 4 to equal 3.
2 specs, 1 failure, 0 skipped, 1 passed, 0 pending, 0 excluded, 0 disabled, 0 total
Здесь видно:
should add numbers correctly).✓) для успешного и
крестик (✗) для неудачного.Jasmine позволяет использовать различные репортеры для форматирования вывода. Репортеры — это модули, которые изменяют внешний вид и формат отчета о результатах тестирования. Среди популярных репортеров можно выделить:
Для использования репортеров, их необходимо добавить в конфигурацию Jasmine. Например, чтобы подключить Jasmine Spec Reporter:
Установить репортер через npm:
npm install jasmine-spec-reporter --save-devНастроить репортер в конфигурации Jasmine (обычно файл
jasmine.json или в JavaScript-коде):
const JasmineSpecReporter = require('jasmine-spec-reporter').SpecReporter;
jasmine.getEnv().addReporter(new JasmineSpecReporter({
spec: {
displayPending: true, // Показывать ожидающие тесты
displayDuration: true // Показать длительность выполнения теста
}
}));
После этого вывод будет более структурированным и удобным для восприятия:
Example Suite
✓ should add numbers correctly
✗ should subtract numbers correctly
Expected 4 to equal 3.
2 specs, 1 failure, 0 skipped, 1 passed
Для сложных случаев можно создавать собственные репортеры, которые будут выводить информацию в нужном формате, например, в формате JSON, или интегрироваться с внешними системами отчетности. Для создания пользовательского репортера нужно реализовать интерфейс репортера, который включает несколько методов:
specStarted(spec) — вызывается при запуске каждого
теста.specDone(spec) — вызывается после завершения каждого
теста.suiteStarted(suite) — вызывается при запуске тестового
набора.suiteDone(suite) — вызывается после завершения
тестового набора.Пример создания простого пользовательского репортера, который записывает результаты в файл:
class CustomReporter {
specDone(result) {
const fs = require('fs');
const log = `Test: ${result.fullName}\nStatus: ${result.status}\n`;
fs.appendFileSync('test_results.log', log);
}
}
jasmine.getEnv().addReporter(new CustomReporter());
Этот репортер будет записывать результаты выполнения каждого теста в
файл test_results.log.
Для улучшения восприятия тестов можно настроить цветное выделение
различных типов сообщений. В Jasmine можно использовать библиотеку
chalk, которая позволяет выделить важные части вывода
цветом.
Пример использования chalk для цветного вывода:
const chalk = require('chalk');
jasmine.getEnv().addReporter({
specDone(result) {
if (result.status === 'failed') {
console.log(chalk.red(`Test Failed: ${result.fullName}`));
} else {
console.log(chalk.green(`Test Passed: ${result.fullName}`));
}
}
});
Здесь, если тест не прошел, его название будет выводиться красным цветом, а если прошел — зеленым.
Jasmine поддерживает асинхронные тесты, и их вывод также можно
настроить для лучшего восприятия. В случае асинхронных операций, таких
как запросы к серверу или работа с базой данных, тесты могут занять
некоторое время для выполнения. Для отображения длительности выполнения
теста можно использовать опцию displayDuration, которая
включается в конфигурации репортера.
Пример с асинхронным тестом и длительностью:
describe('Async Tests', function() {
it('should complete an async operation within a certain time', function(done) {
setTimeout(function() {
expect(true).toBe(true);
done();
}, 1000);
});
});
В результате выполнения этого теста репортер отобразит время,
затраченное на выполнение, если опция displayDuration
включена.
JUnit является популярным форматом вывода для систем CI/CD. Jasmine поддерживает вывод в этот формат через репортер JUnit. Это полезно для интеграции с Jenkins, GitLab CI, Travis и другими инструментами.
Чтобы использовать JUnit репортер:
Установить соответствующий пакет:
npm install jasmine-reporters --save-devНастроить вывод в конфигурации:
const JasmineReporters = require('jasmine-reporters');
jasmine.getEnv().addReporter(new JasmineReporters.JUnitXmlReporter({
savePath: './reports',
consolidateAll: true
}));
Этот репортер генерирует отчет в формате XML, который можно загрузить в системы CI.
Для более быстрого выполнения тестов можно запускать их параллельно.
В Jasmine поддержка параллельного запуска тестов доступна через
использование различных инструментов, например, с помощью плагина
jasmine-parallel или настроек для запуска через систему
CI.
Пример использования плагина jasmine-parallel:
Установить плагин:
npm install jasmine-parallel --save-devЗапустить Jasmine с конфигурацией для параллельного тестирования:
const JasmineParallel = require('jasmine-parallel');
const jasmine = new JasmineParallel();
jasmine.loadConfigFile('jasmine.json');
jasmine.execute();
Параллельный запуск ускоряет выполнение тестов, особенно при большом объеме тестов, и позволяет выводить информацию о каждом тесте с подробной статистикой, что значительно повышает скорость обратной связи в процессе разработки.
Jasmine также поддерживает вывод детализированной статистики по результатам тестов. В стандартном выводе отображаются количество успешных, неудачных и пропущенных тестов. Однако для более сложных проектов, где необходимо отслеживать дополнительные метрики, можно использовать сторонние инструменты или плагины для сбора статистики и отчетности. Например, плагины для CI систем позволяют интегрировать результаты тестов в графики и диаграммы.
Jasmine позволяет маркировать тесты как “pending” (ожидающие) или “disabled” (приостановленные). Эти тесты могут быть исключены из основного вывода или показаны отдельно, что помогает в процессе разработки.
Для пропущенных тестов можно использовать следующее:
it('should be skipped', function() {
pending();
});
Тесты, помеченные как pending(), будут отображаться как
“Пропущено” в итоговом отчете.
Вывод может выглядеть следующим образом:
Suite: Example Suite
✓ should add numbers correctly
✗ should subtract numbers correctly
- should be skipped
Таким образом, Jasmine предоставляет гибкие средства для настройки вывода результатов тестов, что помогает адаптировать его под конкретные требования разработки и интеграции с другими инструментами и сервисами.