| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| |
| // Test assert.rejects() and assert.doesNotReject() by checking their |
| // expected output and by verifying that they do not work sync |
| |
| // Run all tests in parallel and check their outcome at the end. |
| const promises = []; |
| |
| // Check `assert.rejects`. |
| { |
| const rejectingFn = async () => assert.fail(); |
| const errObj = { |
| code: 'ERR_ASSERTION', |
| name: 'AssertionError [ERR_ASSERTION]', |
| message: 'Failed' |
| }; |
| // `assert.rejects` accepts a function or a promise as first argument. |
| promises.push(assert.rejects(rejectingFn, errObj)); |
| promises.push(assert.rejects(rejectingFn(), errObj)); |
| } |
| |
| { |
| const handler = (err) => { |
| assert(err instanceof assert.AssertionError, |
| `${err.name} is not instance of AssertionError`); |
| assert.strictEqual(err.code, 'ERR_ASSERTION'); |
| assert.strictEqual(err.message, |
| 'Missing expected rejection (mustNotCall).'); |
| assert.strictEqual(err.operator, 'rejects'); |
| assert.ok(!err.stack.includes('at Function.rejects')); |
| return true; |
| }; |
| |
| let promise = assert.rejects(async () => {}, common.mustNotCall()); |
| promises.push(assert.rejects(promise, common.mustCall(handler))); |
| |
| promise = assert.rejects(() => {}, common.mustNotCall()); |
| promises.push(assert.rejects(promise, { |
| name: 'TypeError [ERR_INVALID_RETURN_VALUE]', |
| code: 'ERR_INVALID_RETURN_VALUE', |
| message: 'Expected instance of Promise to be returned ' + |
| 'from the "promiseFn" function but got type undefined.' |
| })); |
| |
| promise = assert.rejects(Promise.resolve(), common.mustNotCall()); |
| promises.push(assert.rejects(promise, common.mustCall(handler))); |
| } |
| |
| { |
| const THROWN_ERROR = new Error(); |
| |
| promises.push(assert.rejects(() => { |
| throw THROWN_ERROR; |
| }, {}).catch(common.mustCall((err) => { |
| assert.strictEqual(err, THROWN_ERROR); |
| }))); |
| } |
| |
| promises.push(assert.rejects( |
| assert.rejects('fail', {}), |
| { |
| code: 'ERR_INVALID_ARG_TYPE', |
| message: 'The "promiseFn" argument must be one of type ' + |
| 'Function or Promise. Received type string' |
| } |
| )); |
| |
| // Check `assert.doesNotReject`. |
| { |
| // `assert.doesNotReject` accepts a function or a promise as first argument. |
| const promise = assert.doesNotReject(() => new Map(), common.mustNotCall()); |
| promises.push(assert.rejects(promise, { |
| message: 'Expected instance of Promise to be returned ' + |
| 'from the "promiseFn" function but got instance of Map.', |
| code: 'ERR_INVALID_RETURN_VALUE', |
| name: 'TypeError [ERR_INVALID_RETURN_VALUE]' |
| })); |
| promises.push(assert.doesNotReject(async () => {})); |
| promises.push(assert.doesNotReject(Promise.resolve())); |
| } |
| |
| { |
| const handler1 = (err) => { |
| assert(err instanceof assert.AssertionError, |
| `${err.name} is not instance of AssertionError`); |
| assert.strictEqual(err.code, 'ERR_ASSERTION'); |
| assert.strictEqual(err.message, 'Failed'); |
| return true; |
| }; |
| const handler2 = (err) => { |
| assert(err instanceof assert.AssertionError, |
| `${err.name} is not instance of AssertionError`); |
| assert.strictEqual(err.code, 'ERR_ASSERTION'); |
| assert.strictEqual(err.message, |
| 'Got unwanted rejection.\nActual message: "Failed"'); |
| assert.strictEqual(err.operator, 'doesNotReject'); |
| assert.ok(!err.stack.includes('at Function.doesNotReject')); |
| return true; |
| }; |
| |
| const rejectingFn = async () => assert.fail(); |
| |
| let promise = assert.doesNotReject(rejectingFn, common.mustCall(handler1)); |
| promises.push(assert.rejects(promise, common.mustCall(handler2))); |
| |
| promise = assert.doesNotReject(rejectingFn(), common.mustCall(handler1)); |
| promises.push(assert.rejects(promise, common.mustCall(handler2))); |
| |
| promise = assert.doesNotReject(() => assert.fail(), common.mustNotCall()); |
| promises.push(assert.rejects(promise, common.mustCall(handler1))); |
| } |
| |
| promises.push(assert.rejects( |
| assert.doesNotReject(123), |
| { |
| code: 'ERR_INVALID_ARG_TYPE', |
| message: 'The "promiseFn" argument must be one of type ' + |
| 'Function or Promise. Received type number' |
| } |
| )); |
| |
| // Make sure all async code gets properly executed. |
| Promise.all(promises).then(common.mustCall()); |