UNPKG

cucumber-html-report

Version:

Convert cucumber json reports to a pretty html report.

104 lines (96 loc) 3.54 kB
'use strict'; var add = function add(a, b) { return a + b; }; var sum = function sum(arr) { return arr.reduce(add, 0); }; var validStep = function validStep(step) { return step.hidden === undefined || step.result.status.toLocaleLowerCase() === 'failed'; }; var featurePassed = function featurePassed(feature) { return feature.status === 'passed'; }; var stepPassed = function stepPassed(step) { return step.result.status.toLocaleLowerCase() === 'passed'; }; var stepFailed = function stepFailed(step) { return step.result.status.toLocaleLowerCase() === 'failed'; }; var stepSkipped = function stepSkipped(step) { return step.result.status.toLocaleLowerCase() === 'skipped'; }; var isScenarioType = function isScenarioType(scenario) { return scenario.type === 'scenario' || scenario.keyword === 'Scenario'; }; var getStatusText = function getStatusText(success) { return success ? 'passed' : 'failed'; }; var getValidSteps = function getValidSteps(scenario) { return (scenario.steps || []).filter(validStep); }; var getNumStepsForScenario = function getNumStepsForScenario(scenario) { return getValidSteps(scenario).length; }; var getNumPassedStepsForScenario = function getNumPassedStepsForScenario(scenario) { return getValidSteps(scenario).filter(stepPassed).length; }; var getNumFailedStepsForScenario = function getNumFailedStepsForScenario(scenario) { return getValidSteps(scenario).filter(stepFailed).length; }; var getNumSkippedStepsForScenario = function getNumSkippedStepsForScenario(scenario) { return getValidSteps(scenario).filter(stepSkipped).length; }; var getScenarios = function getScenarios(feature) { return (feature.elements || []).filter(isScenarioType); }; function getScenarioResult(scenario) { return { numSteps: getNumStepsForScenario(scenario), passedSteps: getNumPassedStepsForScenario(scenario), failedSteps: getNumFailedStepsForScenario(scenario), skippedSteps: getNumSkippedStepsForScenario(scenario) }; } function getFeatureResult(feature) { var scenarios = getScenarios(feature); var scenarioResults = scenarios.map(getScenarioResult); var passedScenarios = sum(scenarioResults.map(function (res) { return res.numSteps === res.passedSteps ? 1 : 0; })); var failedScenarios = sum(scenarioResults.map(function (res) { return res.passedSteps === res.numSteps ? 0 : 1; })); return { numScenarios: scenarios.length, passedScenarios: passedScenarios, failedScenarios: failedScenarios }; } exports.getFeatureStatus = function (feature) { var result = getFeatureResult(feature); return getStatusText(result.failedScenarios === 0); }; exports.getScenarioStatus = function (scenario) { var result = getScenarioResult(scenario); return getStatusText(result.failedSteps === 0 && result.skippedSteps === 0); }; exports.calculateSummary = function (features) { var featureResults = features.map(getFeatureResult); var featuresPassed = sum(features.map(featurePassed)); var scenariosPassed = sum(featureResults.map(function (result) { return result.passedScenarios; })); var scenariosFailed = sum(featureResults.map(function (result) { return result.failedScenarios; })); return { totalFeatures: features.length, featuresPassed: featuresPassed, featuresFailed: features.length - featuresPassed, totalScenarios: scenariosPassed + scenariosFailed, scenariosPassed: scenariosPassed, scenariosFailed: scenariosFailed, status: scenariosFailed === 0 ? 'passed' : 'failed' }; };