UNPKG

skutter

Version:

Skutter: Opinionated BDD Browser based test framework

62 lines (61 loc) 2.65 kB
"use strict"; 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;