cucumber-html-report
Version:
Convert cucumber json reports to a pretty html report.
104 lines (96 loc) • 3.54 kB
JavaScript
;
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'
};
};