Skip to content

Commit 157ef25

Browse files
jakwuhsindresorhus
authored andcommitted
Fix reporter bug when rejecting non-errors (#1281)
1 parent 7a6b3c1 commit 157ef25

File tree

4 files changed

+47
-3
lines changed

4 files changed

+47
-3
lines changed

lib/run-status.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@ function sum(arr, key) {
1818
}
1919

2020
function normalizeError(err) {
21-
if (!isObj(err)) {
21+
if (!isObj(err) || typeof err.message !== 'string') {
2222
err = {
23-
message: err,
24-
stack: err
23+
message: String(err)
2524
};
2625
}
2726

lib/serialize-error.js

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ function filter(propertyName, isRoot, source, target) {
2020
return true;
2121
}
2222

23+
if ((propertyName === 'name' || propertyName === 'stack') &&
24+
typeof source[propertyName] !== 'string') {
25+
return false;
26+
}
27+
2328
if (propertyName === 'stack') {
2429
target.stack = beautifyStack(source.stack);
2530
return false;

test/run-status.js

+29
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,32 @@ test('calculate remaining test count', t => {
8787
t.end();
8888
});
8989

90+
test('handle non-object rejections', t => {
91+
const runStatus = new RunStatus();
92+
93+
runStatus.on('error', err => {
94+
t.deepEqual(err, {
95+
file: 'foo.js',
96+
message: '42',
97+
type: 'rejection'
98+
});
99+
t.end();
100+
});
101+
102+
runStatus.handleRejections({file: 'foo.js', rejections: [42]});
103+
});
104+
105+
test('handle non-object exceptions', t => {
106+
const runStatus = new RunStatus();
107+
108+
runStatus.on('error', err => {
109+
t.deepEqual(err, {
110+
file: 'bar.js',
111+
message: '/ab/g',
112+
type: 'exception'
113+
});
114+
t.end();
115+
});
116+
117+
runStatus.handleExceptions({file: 'bar.js', exception: /ab/g});
118+
});

test/serialize-error.js

+11
Original file line numberDiff line numberDiff line change
@@ -210,3 +210,14 @@ test('does not call toJSON() when serializing actual and expected', t => {
210210
t.notSame(serializedErr.actual, serializedErr.expected);
211211
t.end();
212212
});
213+
214+
test('remove non-string error properties', t => {
215+
const err = {
216+
name: [42],
217+
stack: /re/g
218+
};
219+
const serializedErr = serialize(err);
220+
t.is(serializedErr.name, undefined);
221+
t.is(serializedErr.stack, undefined);
222+
t.end();
223+
});

0 commit comments

Comments
 (0)