skutter
Version:
Skutter: Opinionated BDD Browser based test framework
62 lines (61 loc) • 2.65 kB
JavaScript
;
const Lazy = require("lazy.js");
const reporter_base_1 = require("./reporter-base");
const result_types_1 = require("../result-aggregator/result-types");
const step_statuses_1 = require("../result-aggregator/step-statuses");
class RunFailuresReporter extends reporter_base_1.ReporterBase {
runCompleted(results) {
let failedFeatures = Lazy(results).where((feature) => { return feature.result === result_types_1.ResultTypes.Failed; });
if (failedFeatures.size() > 0) {
this.header();
failedFeatures.each((feature) => { this.printFeature(feature); });
}
}
;
header() {
console.log();
console.log("Run Failures");
console.log("-----------------------");
console.log();
}
printFeature(featureResult) {
let failedScenarios = Lazy(featureResult.getScenarios(result_types_1.ResultTypes.Failed));
let failedCount = failedScenarios.size();
let totalCount = featureResult.feature.scenarios.length;
let percentage = (100 / totalCount) * failedCount;
console.log(`Feature: "${featureResult.feature.title}"`);
console.log(` : ${featureResult.feature.filename}`);
console.log(` : ${failedCount} of ${totalCount} scenarios failed (${percentage.toFixed(2)}%)`);
console.log();
failedScenarios.each((scenarioResult) => {
this.printScenario(scenarioResult);
});
}
printScenario(scenarioResult) {
console.log(` Scenario: "${scenarioResult.scenario.title}"`);
let stepIndex = 1;
let duration = 0;
let step = null;
let stepResult = null;
let failureFound = false;
for (step of scenarioResult.scenario.steps) {
stepResult = scenarioResult.findStepResult(step.id);
if (stepResult.result === step_statuses_1.StepStatuses.Failed) {
failureFound = true;
break;
}
else {
duration += stepResult.step.durationMiliseconds;
stepIndex++;
}
}
if (!failureFound) {
throw new Error("Step marked as failure, but no failed step was found within scenario.");
}
console.log(` : Failure during step ${stepIndex} of ${scenarioResult.scenario.steps.length}, ${Number(duration / 1000).toFixed(2)}s after scenario start.`);
console.log(` : Step title "${step.text}"`);
console.log(` : failure "${stepResult.error}"`);
console.log();
}
}
exports.RunFailuresReporter = RunFailuresReporter;