diff --git a/lib/internal/process/promises.js b/lib/internal/process/promises.js index 83dee491a55c90..0fce2901b7408f 100644 --- a/lib/internal/process/promises.js +++ b/lib/internal/process/promises.js @@ -57,7 +57,7 @@ function setupPromises(scheduleMicrotasks) { function emitWarning(uid, reason) { const warning = new Error('Unhandled promise rejection ' + - `(rejection id: ${uid}): ${reason}`); + `(rejection id: ${uid}): ${String(reason)}`); warning.name = 'UnhandledPromiseRejectionWarning'; warning.id = uid; if (reason instanceof Error) { diff --git a/test/parallel/test-promises-unhandled-symbol-rejections.js b/test/parallel/test-promises-unhandled-symbol-rejections.js new file mode 100644 index 00000000000000..a60a5f2e8aac30 --- /dev/null +++ b/test/parallel/test-promises-unhandled-symbol-rejections.js @@ -0,0 +1,18 @@ +'use strict'; +const common = require('../common'); + +const expectedDeprecationWarning = 'Unhandled promise rejections are ' + + 'deprecated. In the future, promise ' + + 'rejections that are not handled will ' + + 'terminate the Node.js process with a ' + + 'non-zero exit code.'; +const expectedPromiseWarning = 'Unhandled promise rejection (rejection id: ' + + '1): Symbol()'; + +common.expectWarning({ + DeprecationWarning: expectedDeprecationWarning, + UnhandledPromiseRejectionWarning: expectedPromiseWarning, +}); + +// ensure this doesn't crash +Promise.reject(Symbol());