summaryrefslogtreecommitdiff
path: root/test/parallel/test-promise-unhandled-error.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/parallel/test-promise-unhandled-error.js')
-rw-r--r--test/parallel/test-promise-unhandled-error.js54
1 files changed, 54 insertions, 0 deletions
diff --git a/test/parallel/test-promise-unhandled-error.js b/test/parallel/test-promise-unhandled-error.js
new file mode 100644
index 0000000000..bb906fdcbe
--- /dev/null
+++ b/test/parallel/test-promise-unhandled-error.js
@@ -0,0 +1,54 @@
+// Flags: --unhandled-rejections=strict
+'use strict';
+
+const common = require('../common');
+const Countdown = require('../common/countdown');
+const assert = require('assert');
+
+common.disableCrashOnUnhandledRejection();
+
+// Verify that unhandled rejections always trigger uncaught exceptions instead
+// of triggering unhandled rejections.
+
+const err1 = new Error('One');
+const err2 = new Error(
+ 'This error originated either by throwing ' +
+ 'inside of an async function without a catch block, or by rejecting a ' +
+ 'promise which was not handled with .catch(). The promise rejected with the' +
+ ' reason "null".'
+);
+err2.code = 'ERR_UNHANDLED_REJECTION';
+Object.defineProperty(err2, 'name', {
+ value: 'UnhandledPromiseRejection',
+ writable: true,
+ configurable: true
+});
+
+const errors = [err1, err2];
+const identical = [true, false];
+
+const ref = new Promise(() => {
+ throw err1;
+});
+// Explicitly reject `null`.
+Promise.reject(null);
+
+process.on('warning', common.mustNotCall('warning'));
+process.on('unhandledRejection', common.mustCall(2));
+process.on('rejectionHandled', common.mustNotCall('rejectionHandled'));
+process.on('exit', assert.strictEqual.bind(null, 0));
+
+const timer = setTimeout(() => console.log(ref), 1000);
+
+const counter = new Countdown(2, () => {
+ clearTimeout(timer);
+});
+
+process.on('uncaughtException', common.mustCall((err, origin) => {
+ counter.dec();
+ assert.strictEqual(origin, 'unhandledRejection', err);
+ const knownError = errors.shift();
+ assert.deepStrictEqual(err, knownError);
+ // Check if the errors are reference equal.
+ assert(identical.shift() ? err === knownError : err !== knownError);
+}, 2));