junit-to-md/bin/junit-to-md.js

70 lines
2.0 KiB
JavaScript
Executable File

#!/usr/bin/env node
const fs = require("fs");
const glob = require("glob");
const parser = require("junit-xml-parser").parser;
let output = "status";
if (process.argv.length > 2) {
output = process.argv[2];
}
let totalTests = 0;
let failedTests = 0;
let failedTestDetails = [];
glob("**/TEST*.xml", async function(err, files) {
// console.dir(files);
for (let index = 0; index < files.length; index++) {
const junitresults = await parser.parse(fs.readFileSync(files[index]));
// console.dir(junitresults);
totalTests += junitresults.suite.summary.tests;
failedTests += junitresults.suite.summary.failures;
if (junitresults.suite.summary.failures > 0) {
for (let tindex = 0; tindex < junitresults.suite.tests.length; tindex++) {
if (junitresults.suite.tests[tindex].failure != null) {
failedTestDetails.push(
junitresults.suite.name +
"/" +
junitresults.suite.tests[tindex].name
);
}
}
}
}
if (output === "text") {
outputText();
} else if (output === "summary") {
outputSummary();
} else {
if (failedTests > 0) {
console.log("Failing tests detected, so returning a non-zero exit code");
process.exit(1);
} else if (totalTests == 0) {
console.log("No tests detected, so returning a non-zero exit code");
process.exit(1);
}
}
});
function outputText() {
console.log("### Test Failures:");
if (failedTestDetails.length > 0) {
for (let index = 0; index < failedTestDetails.length; index++) {
console.log("- " + failedTestDetails[index]);
}
} else if (totalTests > 0) {
console.log("No failing tests, awesome!");
} else {
console.log("No tests found.");
}
}
function outputSummary() {
console.log("### Testing Summary:");
console.log(" ");
console.log("- " + totalTests + " Total test(s)");
console.log("- " + (totalTests - failedTests) + " Successful test(s)");
console.log("- " + failedTests + " Failed test(s)");
}