Skip to content

Commit ca6b59b

Browse files
author
jakwuh
committed
Fix run-status / normalizeError
1 parent 98dded5 commit ca6b59b

File tree

2 files changed

+58
-3
lines changed

2 files changed

+58
-3
lines changed

lib/run-status.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,15 @@ function sum(arr, key) {
1818
}
1919

2020
function normalizeError(err) {
21-
if (!isObj(err)) {
21+
if (isObj(err) && 'message' in err && typeof err.message === 'string') {
22+
['name', 'stack'].forEach(field => {
23+
if (field in err && typeof err[field] !== 'string') {
24+
delete err[field];
25+
}
26+
});
27+
} else {
2228
err = {
23-
message: err,
24-
stack: err
29+
message: String(err)
2530
};
2631
}
2732

test/run-status.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,53 @@ 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+
});
119+
120+
test('remove non-string error properties from error-like objects', t => {
121+
const runStatus = new RunStatus();
122+
123+
runStatus.on('error', err => {
124+
t.deepEqual(err, {
125+
file: 'bar.js',
126+
message: 'err msg',
127+
type: 'rejection'
128+
});
129+
t.end();
130+
});
131+
132+
const err = {
133+
message: 'err msg',
134+
stack: {},
135+
name: ['baz']
136+
};
137+
138+
runStatus.handleRejections({file: 'bar.js', rejections: [err]});
139+
});

0 commit comments

Comments
 (0)