Browse Source

Fix reporter bug when rejecting non-errors (#1281)

master
James 8 years ago
committed by Sindre Sorhus
parent
commit
157ef25aff
  1. 5
      lib/run-status.js
  2. 5
      lib/serialize-error.js
  3. 29
      test/run-status.js
  4. 11
      test/serialize-error.js

5
lib/run-status.js

@ -18,10 +18,9 @@ function sum(arr, key) {
}
function normalizeError(err) {
if (!isObj(err)) {
if (!isObj(err) || typeof err.message !== 'string') {
err = {
message: err,
stack: err
message: String(err)
};
}

5
lib/serialize-error.js

@ -20,6 +20,11 @@ function filter(propertyName, isRoot, source, target) {
return true;
}
if ((propertyName === 'name' || propertyName === 'stack') &&
typeof source[propertyName] !== 'string') {
return false;
}
if (propertyName === 'stack') {
target.stack = beautifyStack(source.stack);
return false;

29
test/run-status.js

@ -87,3 +87,32 @@ test('calculate remaining test count', t => {
t.end();
});
test('handle non-object rejections', t => {
const runStatus = new RunStatus();
runStatus.on('error', err => {
t.deepEqual(err, {
file: 'foo.js',
message: '42',
type: 'rejection'
});
t.end();
});
runStatus.handleRejections({file: 'foo.js', rejections: [42]});
});
test('handle non-object exceptions', t => {
const runStatus = new RunStatus();
runStatus.on('error', err => {
t.deepEqual(err, {
file: 'bar.js',
message: '/ab/g',
type: 'exception'
});
t.end();
});
runStatus.handleExceptions({file: 'bar.js', exception: /ab/g});
});

11
test/serialize-error.js

@ -210,3 +210,14 @@ test('does not call toJSON() when serializing actual and expected', t => {
t.notSame(serializedErr.actual, serializedErr.expected);
t.end();
});
test('remove non-string error properties', t => {
const err = {
name: [42],
stack: /re/g
};
const serializedErr = serialize(err);
t.is(serializedErr.name, undefined);
t.is(serializedErr.stack, undefined);
t.end();
});

Loading…
Cancel
Save