diff --git a/lib/events.js b/lib/events.js index 10cec4bd69d4d1..fab8652ebf0457 100644 --- a/lib/events.js +++ b/lib/events.js @@ -172,9 +172,18 @@ EventEmitter.prototype.emit = function emit(type, ...args) { // up in Node's output if this results in an unhandled exception. throw er; // Unhandled 'error' event } + + let stringifiedEr; + const { inspect } = require('internal/util/inspect'); + try { + stringifiedEr = inspect(er); + } catch { + stringifiedEr = er; + } + // At least give some kind of context to the user const errors = lazyErrors(); - const err = new errors.ERR_UNHANDLED_ERROR(er); + const err = new errors.ERR_UNHANDLED_ERROR(stringifiedEr); err.context = er; throw err; // Unhandled 'error' event } diff --git a/test/parallel/test-event-emitter-errors.js b/test/parallel/test-event-emitter-errors.js index ef2bbee93f8bfd..13d3a98d9c0a50 100644 --- a/test/parallel/test-event-emitter-errors.js +++ b/test/parallel/test-event-emitter-errors.js @@ -1,6 +1,7 @@ 'use strict'; const common = require('../common'); const EventEmitter = require('events'); +const util = require('util'); const EE = new EventEmitter(); @@ -9,12 +10,24 @@ common.expectsError( { code: 'ERR_UNHANDLED_ERROR', type: Error, - message: 'Unhandled error. (Accepts a string)' + message: "Unhandled error. ('Accepts a string')" } ); common.expectsError( () => EE.emit('error', { message: 'Error!' }), + { + code: 'ERR_UNHANDLED_ERROR', + type: Error, + message: "Unhandled error. ({ message: 'Error!' })" + } +); + +common.expectsError( + () => EE.emit('error', { + message: 'Error!', + [util.inspect.custom]() { throw new Error(); } + }), { code: 'ERR_UNHANDLED_ERROR', type: Error,