skutter
Version:
Skutter: Opinionated BDD Browser based test framework
81 lines (80 loc) • 3.33 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 RunErrorsReporter extends reporter_base_1.ReporterBase {
runCompleted(results, errors) {
let failedFeatures = Lazy(results).where((feature) => { return feature.result === result_types_1.ResultTypes.Errored; });
if (failedFeatures.size() > 0) {
this.header();
failedFeatures.each((feature) => { this.printFeature(feature); });
}
if (errors && errors.length > 0) {
this.errorHeader();
Lazy(errors).each((error) => { this.printError(error); });
}
}
;
header() {
console.log();
console.log("Run Errors");
console.log("-----------------------");
console.log();
}
errorHeader() {
console.log();
console.log("Non-Step Errors");
console.log("-----------------------");
console.log();
}
printFeature(featureResult) {
let failedScenarios = Lazy(featureResult.getScenarios(result_types_1.ResultTypes.Errored));
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 errored (${percentage.toFixed(2)}%)`);
console.log();
failedScenarios.each((scenarioResult) => {
this.printScenario(scenarioResult);
});
}
printError(error) {
console.log(` : Message: ${error.message}`);
console.log(` : Initiator: ${error.initiator}`);
console.log(` : ${error.errorMessage}`);
console.log(` : ${error.errorStack}`);
console.log();
}
printScenario(scenarioResult) {
console.log(` Scenario: "${scenarioResult.scenario.title}"`);
let stepIndex = 1;
let duration = 0;
let step = null;
let stepResult;
let failureFound = false;
for (step of scenarioResult.scenario.steps) {
stepResult = scenarioResult.findStepResult(step.id);
if (stepResult.result === step_statuses_1.StepStatuses.Errored) {
failureFound = true;
break;
}
else {
duration += stepResult.step.durationMiliseconds;
stepIndex++;
}
}
if (!failureFound) {
console.log(" Step marked as Error, but no errored step was found within scenario. Error may have occurred outside of step execution.");
console.log();
return;
}
console.log(` : Error 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(` : error "${stepResult.error}"`);
console.log();
}
}
exports.RunErrorsReporter = RunErrorsReporter;