Jasmine является встроенным фреймворком для тестирования в Protractor, предоставляя мощный набор возможностей для написания и выполнения тестов. Одним из ключевых аспектов эффективного тестирования является отчётность — возможность фиксировать результаты тестов, анализировать их и интегрировать с системами CI/CD.
Jasmine использует концепцию спецификаций (specs) и
свитов (suites) для организации тестов. Каждая
спецификация представляет собой отдельный тест, а свиты объединяют их в
логические группы с помощью describe. Для формирования
отчётов Jasmine предоставляет:
Ключевой момент: Protractor не ограничивается встроенными возможностями Jasmine; можно интегрировать сторонние репортеры для более гибкой отчётности.
Jasmine предоставляет объект jasmine.getEnv(), через который можно подключать репортеры:
const JasmineConsoleReporter = require('jasmine-console-reporter');
const reporter = new JasmineConsoleReporter({
colors: 1, // Использование цветов
cleanStack: 1, // Очистка стека ошибок
verbosity: 4, // Подробность вывода
listStyle: 'indent' // Стиль списка тестов
});
jasmine.getEnv().addReporter(reporter);
Эта конфигурация обеспечивает детализированный вывод в консоль, позволяя видеть не только успешные и провалившиеся тесты, но и трассировку ошибок.
Для визуализации результатов тестов удобно использовать HTML-отчёты.
Один из популярных инструментов —
protractor-jasmine2-html-reporter:
const HtmlReporter = require('protractor-jasmine2-html-reporter');
exports.config = {
onPrepare: function() {
jasmine.getEnv().addReporter(
new HtmlReporter({
savePath: 'test-reports/',
screenshotsFolder: 'images',
takeScreenshots: true,
takeScreenshotsOnlyOnFailures: true,
cleanDestination: false,
fileName: 'TestReport',
consolidate: true
}).getJasmine2Reporter()
);
}
};
Особенности:
Для интеграции с Jenkins или другими CI-системами часто используется
формат JUnit XML. Репортер
jasmine-reporters позволяет легко создавать такие
отчёты:
const jasmineReporters = require('jasmine-reporters');
jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
savePath: 'test-results',
consolidateAll: false,
filePrefix: 'xmlresults'
}));
Преимущества:
Jasmine поддерживает создание кастомных репортеров, что позволяет полностью контролировать процесс отчётности. Основная структура кастомного репортера:
class CustomReporter {
jasmineStarted(suiteInfo) {
console.log(`Начало тестов: ${suiteInfo.totalSpecsDefined} спецификаций`);
}
specStarted(result) {
console.log(`Тест "${result.description}" начат`);
}
specDone(result) {
console.log(`Тест "${result.description}" завершён со статусом: ${result.status}`);
if(result.failedExpectations.length > 0) {
console.log('Ошибки:', result.failedExpectations);
}
}
jasmineDone() {
console.log('Все тесты выполнены');
}
}
jasmine.getEnv().addReporter(new CustomReporter());
Такой подход позволяет:
В Protractor часто требуется делать скриншоты при падении теста. Это можно реализовать через репортер:
const fs = require('fs');
class ScreenshotReporter {
specDone(result) {
if(result.status === 'failed') {
browser.takeScreenshot().then((png) => {
const stream = fs.createWriteStream(`screenshots/${result.fullName}.png`);
stream.write(new Buffer.from(png, 'base64'));
stream.end();
});
}
}
}
jasmine.getEnv().addReporter(new ScreenshotReporter());
Преимущества такого подхода:
Jasmine позволяет настраивать уровень логирования и фильтровать тесты
через fit, fdescribe, xdescribe и
xit. Это полезно для сокращения объёма
отчётов и фокусировки на критичных сценариях.
fit — выполняет только один тест.fdescribe — выполняет только выбранный свит.xit и xdescribe — исключают тесты из
выполнения, но оставляют их в отчётах как пропущенные.Эта гибкость помогает поддерживать чистоту отчётов и концентрироваться на актуальных результатах.
Jasmine-отчёты легко интегрируются с системами непрерывной интеграции:
Использование автоматизированной отчётности позволяет отслеживать стабильность тестов, обнаруживать нестабильные сценарии и поддерживать качество продукта на постоянном уровне.
Jasmine-отчётность в Protractor обеспечивает полный контроль над тестовой информацией, позволяя структурировать результаты, визуализировать ошибки и интегрировать тесты в процессы непрерывной поставки программного обеспечения.