From ca6b59bf7c5edf773c9d7b3844806c7a7b457be5 Mon Sep 17 00:00:00 2001 From: jakwuh Date: Sun, 26 Feb 2017 15:32:17 +0300 Subject: [PATCH 1/2] Fix run-status / normalizeError --- lib/run-status.js | 11 +++++++--- test/run-status.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/lib/run-status.js b/lib/run-status.js index 8164bc08e..32390b82d 100644 --- a/lib/run-status.js +++ b/lib/run-status.js @@ -18,10 +18,15 @@ function sum(arr, key) { } function normalizeError(err) { - if (!isObj(err)) { + if (isObj(err) && 'message' in err && typeof err.message === 'string') { + ['name', 'stack'].forEach(field => { + if (field in err && typeof err[field] !== 'string') { + delete err[field]; + } + }); + } else { err = { - message: err, - stack: err + message: String(err) }; } diff --git a/test/run-status.js b/test/run-status.js index 7783abe5f..e30adf438 100644 --- a/test/run-status.js +++ b/test/run-status.js @@ -87,3 +87,53 @@ 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}); +}); + +test('remove non-string error properties from error-like objects', t => { + const runStatus = new RunStatus(); + + runStatus.on('error', err => { + t.deepEqual(err, { + file: 'bar.js', + message: 'err msg', + type: 'rejection' + }); + t.end(); + }); + + const err = { + message: 'err msg', + stack: {}, + name: ['baz'] + }; + + runStatus.handleRejections({file: 'bar.js', rejections: [err]}); +}); From d5190817a60623d77c539f9a65b34f165014e2f8 Mon Sep 17 00:00:00 2001 From: jakwuh Date: Mon, 27 Feb 2017 02:17:24 +0300 Subject: [PATCH 2/2] Fix code review notices --- lib/run-status.js | 8 +------- lib/serialize-error.js | 5 +++++ test/run-status.js | 21 --------------------- test/serialize-error.js | 11 +++++++++++ 4 files changed, 17 insertions(+), 28 deletions(-) diff --git a/lib/run-status.js b/lib/run-status.js index 32390b82d..70791c67f 100644 --- a/lib/run-status.js +++ b/lib/run-status.js @@ -18,13 +18,7 @@ function sum(arr, key) { } function normalizeError(err) { - if (isObj(err) && 'message' in err && typeof err.message === 'string') { - ['name', 'stack'].forEach(field => { - if (field in err && typeof err[field] !== 'string') { - delete err[field]; - } - }); - } else { + if (!isObj(err) || typeof err.message !== 'string') { err = { message: String(err) }; diff --git a/lib/serialize-error.js b/lib/serialize-error.js index 6a8c4947b..cbb0a2ac4 100644 --- a/lib/serialize-error.js +++ b/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; diff --git a/test/run-status.js b/test/run-status.js index e30adf438..9c6a5e5ac 100644 --- a/test/run-status.js +++ b/test/run-status.js @@ -116,24 +116,3 @@ test('handle non-object exceptions', t => { runStatus.handleExceptions({file: 'bar.js', exception: /ab/g}); }); - -test('remove non-string error properties from error-like objects', t => { - const runStatus = new RunStatus(); - - runStatus.on('error', err => { - t.deepEqual(err, { - file: 'bar.js', - message: 'err msg', - type: 'rejection' - }); - t.end(); - }); - - const err = { - message: 'err msg', - stack: {}, - name: ['baz'] - }; - - runStatus.handleRejections({file: 'bar.js', rejections: [err]}); -}); diff --git a/test/serialize-error.js b/test/serialize-error.js index 27320d85f..305ebd36d 100644 --- a/test/serialize-error.js +++ b/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(); +});