Skip to content

Instantly share code, notes, and snippets.

@alexschwartz
Last active January 13, 2020 21:11
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexschwartz/178fdcbc5ffbe0b3cb631dd8047fdb9f to your computer and use it in GitHub Desktop.
Save alexschwartz/178fdcbc5ffbe0b3cb631dd8047fdb9f to your computer and use it in GitHub Desktop.
node.js: parse xunit test file
var expect = require("chai").expect;
var walk_tests = require("./walk_xunit_tests.js").walk_tests;
var util = require('util');
describe("walk_tests", function() {
let input = `<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="SuiteA" errors="0" skipped="1" tests="3" failures="1">
<testcase classname="Class A" name="test1" time="0.006" status="run"/>
</testsuite>
<testsuite name="SuiteB" errors="0" skipped="1" tests="3" failures="1">
<testcase classname="Class A" name="test1" time="0.006" status="run"/>
<testcase classname="Class B" name="test2" time="0.006" status="run"/>
<testcase classname="Class C" name="test3" time="0.006" status="run"/>
<testcase classname="Class C" name="test4" time="0.006" status="run"/>
<testcase classname="Class C" name="test5" time="0.006" status="run"/>
</testsuite>
</testsuites>`;
let result;
before(function() {
result = [];
walk_tests(input, function(test) {
//console.log(util.inspect(test, {showHidden: false, depth: null}));
result.push(test);
});
});
it("should have 6 elements", function() {
expect(result).to.have.length(6);
});
it("have correct structure of items", function() {
expect(result[0]).to.eql({
suite: 'SuiteA',
classname: 'Class A',
test: 'test1',
status: 'run' });
});
});
var xml2js = require('xml2js');
exports.walk_tests = function(xunit_content, callback) {
var parser = new xml2js.Parser();
var items = [];
parser.parseString(xunit_content, function (err, result) {
result.testsuites.testsuite.map(function(item) {
item.testcase.map(function(testcase) {
callback({ suite:item.$.name, classname:testcase.$.classname, test:testcase.$.name, status: testcase.$.status });
});
});
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment