assert: stricter ifError

This makes `assert.ifError` stricter by only accepting `null` and
`undefined` from now on. Before any truthy value was accepted.

PR-URL: https://github.com/nodejs/node/pull/18247
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Ruben Bridgewater 2018-01-23 14:07:18 +01:00
parent 8e6e1c9dcc
commit e65a6e81ef
No known key found for this signature in database
GPG Key ID: F07496B3EB3C1762
4 changed files with 17 additions and 9 deletions

View File

@ -474,11 +474,15 @@ changes:
pr-url: https://github.com/nodejs/node/pull/18247 pr-url: https://github.com/nodejs/node/pull/18247
description: Instead of throwing the original error it is now wrapped into description: Instead of throwing the original error it is now wrapped into
a AssertionError that contains the full stack trace. a AssertionError that contains the full stack trace.
- version: REPLACEME
pr-url: https://github.com/nodejs/node/pull/18247
description: Value may now only be `undefined` or `null`. Before any truthy
input was accepted.
--> -->
* `value` {any} * `value` {any}
Throws `value` if `value` is truthy. This is useful when testing the `error` Throws `value` if `value` is not `undefined` or `null`. This is useful when
argument in callbacks. testing the `error` argument in callbacks.
```js ```js
const assert = require('assert').strict; const assert = require('assert').strict;
@ -486,9 +490,7 @@ const assert = require('assert').strict;
assert.ifError(null); assert.ifError(null);
// OK // OK
assert.ifError(0); assert.ifError(0);
// OK // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0
assert.ifError(1);
// AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 1
assert.ifError('error'); assert.ifError('error');
// AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error' // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error'
assert.ifError(new Error()); assert.ifError(new Error());

View File

@ -453,7 +453,7 @@ assert.doesNotThrow = function doesNotThrow(block, error, message) {
}; };
assert.ifError = function ifError(err) { assert.ifError = function ifError(err) {
if (err) { if (err !== null && err !== undefined) {
let message = 'ifError got unwanted exception: '; let message = 'ifError got unwanted exception: ';
if (typeof err === 'object' && typeof err.message === 'string') { if (typeof err === 'object' && typeof err.message === 'string') {
if (err.message.length === 0 && err.constructor) { if (err.message.length === 0 && err.constructor) {

View File

@ -60,10 +60,16 @@ assert.throws(
} }
); );
assert.throws(
() => { assert.ifError(false); },
{
message: 'ifError got unwanted exception: false'
}
);
assert.doesNotThrow(() => { assert.ifError(null); }); assert.doesNotThrow(() => { assert.ifError(null); });
assert.doesNotThrow(() => { assert.ifError(); }); assert.doesNotThrow(() => { assert.ifError(); });
assert.doesNotThrow(() => { assert.ifError(undefined); }); assert.doesNotThrow(() => { assert.ifError(undefined); });
assert.doesNotThrow(() => { assert.ifError(false); });
// https://github.com/nodejs/node-v0.x-archive/issues/2893 // https://github.com/nodejs/node-v0.x-archive/issues/2893
{ {

View File

@ -16,8 +16,8 @@ function test(arg, port = '') {
let stderr = ''; let stderr = '';
proc.stdout.on('data', (data) => stdout += data); proc.stdout.on('data', (data) => stdout += data);
proc.stderr.on('data', (data) => stderr += data); proc.stderr.on('data', (data) => stderr += data);
proc.stdout.on('close', assert.ifError); proc.stdout.on('close', (hadErr) => assert(!hadErr));
proc.stderr.on('close', assert.ifError); proc.stderr.on('close', (hadErr) => assert(!hadErr));
proc.stderr.on('data', () => { proc.stderr.on('data', () => {
if (!stderr.includes('\n')) return; if (!stderr.includes('\n')) return;
assert(/Debugger listening on (.+)/.test(stderr)); assert(/Debugger listening on (.+)/.test(stderr));