Skip to content

Commit 674e228

Browse files
committed
fix: work around xml2js null object prototypes
1 parent 659a38a commit 674e228

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

lib.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import columnify from 'columnify';
33
import { red, green, bold } from 'colorette';
44
import { EOL } from 'os';
55

6+
const toString = (v) => Object.prototype.toString.call(v);
7+
68
export const generateSummary = (summary) => {
79
const data = {
810
'> Name:': summary.name,
@@ -59,7 +61,7 @@ const generateTestcaseResult = (testcase) => {
5961
if (!isTestcaseSuccess(testcase)) {
6062
let errorLines = '';
6163
if (testcase.failure.join) {
62-
errorLines = testcase.failure.join(EOL).split(EOL).join(EOL + '\t');
64+
errorLines = testcase.failure.map(toString).join(EOL).split(EOL).join(EOL + '\t');
6365
} else {
6466
errorLines = testcase.failure;
6567
}
@@ -91,5 +93,5 @@ export const generateTestsuiteResult = (suiteResult) => {
9193
result = testscases.map(testcase => generateTestcaseResult(testcase));
9294
}
9395

94-
return result.join(EOL);
96+
return result.map(toString).join(EOL);
9597
};

lib.test.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,52 @@
11
import assert from 'assert';
22

33
import * as lib from './lib.js';
4+
import parseString from 'xml2js';
5+
6+
const xmlStr = `
7+
<?xml version="1.0" encoding="UTF-8" ?>
8+
<testsuites>
9+
<testsuite name="someName" time="0.004" errors="0" tests="2" skipped="0" failures="1">
10+
<testcase classname="className" name="someName" time="0.002">
11+
<failure type="toBe" message="Expected 1 to be 2.">
12+
</failure>
13+
</testcase>
14+
<testcase classname="clasName2" name="someName2" time="0">
15+
</testcase>
16+
</testsuite>
17+
</testsuites>
18+
`;
419

520
describe('lib', () => {
21+
22+
describe('from parsed XML', () => {
23+
let result, err;
24+
beforeEach((done) => {
25+
parseString.parseString(xmlStr, (outErr, outResult) => {
26+
result = outResult;
27+
err = outErr;
28+
done();
29+
});
30+
});
31+
it('should parse', () => {
32+
assert.equal(err, null);
33+
});
34+
it('should not throw with parsed XML', () => {
35+
if (!result.testsuites.$) {
36+
result.testsuites.$ = lib.findSummaryFromTestsuites(result.testsuites.testsuite);
37+
} else {
38+
result.testsuites.$ = {
39+
...result.testsuites.$,
40+
...lib.findSummaryFromTestsuites(result.testsuites.testsuite),
41+
};
42+
}
43+
assert.doesNotThrow(() => lib.generateSummary(result.testsuites.$));
44+
result.testsuites.testsuite.forEach(t => {
45+
assert.doesNotThrow(() => lib.generateTestsuiteSummary(t));
46+
assert.doesNotThrow(() => lib.generateTestsuiteResult(t));
47+
});
48+
});
49+
});
650
describe('generateSummary()', () => {
751
const summary = {
852
name: 'test',

0 commit comments

Comments
 (0)