| // Flags: --no-warnings --unhandled-rejections=warn |
| 'use strict'; |
| |
| // Test that warnings are emitted when a Promise experiences an uncaught |
| // rejection, and then again if the rejection is handled later on. |
| |
| const common = require('../common'); |
| const assert = require('assert'); |
| |
| let b = 0; |
| |
| process.on('warning', common.mustCall((warning) => { |
| switch (b++) { |
| case 0: |
| // String rejection error displayed |
| assert.strictEqual(warning.message, 'This was rejected'); |
| break; |
| case 1: |
| // Warning about rejection not being handled (will be next tick) |
| assert.strictEqual(warning.name, 'UnhandledPromiseRejectionWarning'); |
| assert( |
| /Unhandled promise rejection/.test(warning.message), |
| 'Expected warning message to contain "Unhandled promise rejection" ' + |
| `but did not. Had "${warning.message}" instead.` |
| ); |
| break; |
| case 2: |
| // Number rejection error displayed. Note it's been stringified |
| assert.strictEqual(warning.message, '42'); |
| break; |
| case 3: |
| // Unhandled rejection warning (won't be handled next tick) |
| assert.strictEqual(warning.name, 'UnhandledPromiseRejectionWarning'); |
| assert( |
| /Unhandled promise rejection/.test(warning.message), |
| 'Expected warning message to contain "Unhandled promise rejection" ' + |
| `but did not. Had "${warning.message}" instead.` |
| ); |
| break; |
| case 4: |
| // Rejection handled asynchronously. |
| assert.strictEqual(warning.name, 'PromiseRejectionHandledWarning'); |
| assert(/Promise rejection was handled asynchronously/ |
| .test(warning.message)); |
| } |
| }, 5)); |
| |
| const p = Promise.reject('This was rejected'); // Reject with a string |
| setImmediate(common.mustCall(() => p.catch(() => { }))); |
| Promise.reject(42); // Reject with a number |