From 290684a4e62e92f83eacf034c0b58aa91ade1c3e Mon Sep 17 00:00:00 2001 From: William Holloway Date: Tue, 7 May 2019 14:36:10 -0700 Subject: [PATCH] Fix errors() when err object has an enumerable message prop --- errors.js | 2 +- test/errors.test.js | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/errors.js b/errors.js index b7a0975..b71f4de 100644 --- a/errors.js +++ b/errors.js @@ -28,8 +28,8 @@ module.exports = format((einfo, { stack }) => { // Assign all enumerable properties and the // message property from the error provided. - Object.assign(einfo, einfo.message); const err = einfo.message; + Object.assign(einfo, err); einfo.message = err.message; einfo[MESSAGE] = err.message; diff --git a/test/errors.test.js b/test/errors.test.js index 3b8944e..fc54cfe 100644 --- a/test/errors.test.js +++ b/test/errors.test.js @@ -19,6 +19,10 @@ errInfoProps.level = 'error'; errInfoProps.whatever = true; errInfoProps.wut = 'some string'; +const errEnumerableMsg = new Error(); +errEnumerableMsg.message = 'message set later'; +errEnumerableMsg.extraProp = 'an extra prop'; + describe('errors()({ object })', () => { it('errors() returns the original info', assumeFormatted( errors(), @@ -69,6 +73,19 @@ describe('errors()({ object })', () => { assume(info.wut).equals('some string'); } )); + + it('errors() still works when err.message is enumerable', assumeFormatted( + errors(), + { level: 'info', message: errEnumerableMsg }, + (info) => { + assume(info.level).is.a('string'); + assume(info.message).is.a('string'); + assume(info.level).equals('info'); + assume(info.message).equals(errEnumerableMsg.message); + assume(info[MESSAGE]).equals(errEnumerableMsg.message); + assume(info.extraProp).equals('an extra prop'); + } + )); }); describe('errors()(Error)', () => {