2012-02-27 20:07:12 +01:00
|
|
|
# Assert
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2017-01-23 04:16:21 +01:00
|
|
|
<!--introduced_in=v0.10.0-->
|
|
|
|
|
2017-02-10 23:11:22 +01:00
|
|
|
> Stability: 2 - Stable
|
2012-03-03 00:14:03 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
The `assert` module provides a simple set of assertion tests that can be used to
|
2017-02-02 01:01:33 +01:00
|
|
|
test invariants.
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-26 04:56:21 +01:00
|
|
|
## assert(value[, message])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.5.9
|
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `value` {any}
|
|
|
|
* `message` {any}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2017-03-20 04:49:47 +01:00
|
|
|
An alias of [`assert.ok()`][].
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## assert.deepEqual(actual, expected[, message])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.21
|
2017-02-21 23:39:15 +01:00
|
|
|
changes:
|
2017-08-26 00:18:23 +02:00
|
|
|
- version: REPLACEME
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/15001
|
|
|
|
description: Error names and messages are now properly compared
|
2017-03-16 04:26:14 +01:00
|
|
|
- version: v8.0.0
|
2017-03-31 05:46:07 +02:00
|
|
|
pr-url: https://github.com/nodejs/node/pull/12142
|
|
|
|
description: Set and Map content is also compared
|
2017-02-21 23:39:15 +01:00
|
|
|
- version: v6.4.0, v4.7.1
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/8002
|
|
|
|
description: Typed array slices are handled correctly now.
|
|
|
|
- version: v6.1.0, v4.5.0
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/6432
|
|
|
|
description: Objects with circular references can be used as inputs now.
|
|
|
|
- version: v5.10.1, v4.4.3
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/5910
|
|
|
|
description: Handle non-`Uint8Array` typed arrays correctly.
|
2016-05-11 08:08:33 +02:00
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `actual` {any}
|
|
|
|
* `expected` {any}
|
|
|
|
* `message` {any}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-12-20 04:08:13 +01:00
|
|
|
Tests for deep equality between the `actual` and `expected` parameters.
|
2017-02-02 23:02:29 +01:00
|
|
|
Primitive values are compared with the [Abstract Equality Comparison][]
|
|
|
|
( `==` ).
|
|
|
|
|
|
|
|
Only [enumerable "own" properties][] are considered. The
|
|
|
|
[`assert.deepEqual()`][] implementation does not test the
|
|
|
|
[`[[Prototype]]`][prototype-spec] of objects, attached symbols, or
|
|
|
|
non-enumerable properties — for such checks, consider using
|
2017-03-31 05:46:07 +02:00
|
|
|
[`assert.deepStrictEqual()`][] instead. This can lead to some
|
2017-02-02 23:02:29 +01:00
|
|
|
potentially surprising results. For example, the following example does not
|
2017-08-19 07:39:03 +02:00
|
|
|
throw an `AssertionError` because the properties on the [`RegExp`][] object are
|
2017-02-02 23:02:29 +01:00
|
|
|
not enumerable:
|
2015-10-12 22:58:00 +02:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
// WARNING: This does not throw an AssertionError!
|
2017-08-19 07:39:03 +02:00
|
|
|
assert.deepEqual(/a/gi, new Date());
|
2016-01-17 18:39:07 +01:00
|
|
|
```
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2017-03-31 05:46:07 +02:00
|
|
|
An exception is made for [`Map`][] and [`Set`][]. Maps and Sets have their
|
|
|
|
contained items compared too, as expected.
|
|
|
|
|
2015-12-20 04:08:13 +01:00
|
|
|
"Deep" equality means that the enumerable "own" properties of child objects
|
|
|
|
are evaluated also:
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const assert = require('assert');
|
|
|
|
|
|
|
|
const obj1 = {
|
2017-04-21 16:38:31 +02:00
|
|
|
a: {
|
|
|
|
b: 1
|
2016-01-17 18:39:07 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
const obj2 = {
|
2017-04-21 16:38:31 +02:00
|
|
|
a: {
|
|
|
|
b: 2
|
2016-01-17 18:39:07 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
const obj3 = {
|
2017-04-21 16:38:31 +02:00
|
|
|
a: {
|
|
|
|
b: 1
|
2016-01-17 18:39:07 +01:00
|
|
|
}
|
2016-07-15 07:41:29 +02:00
|
|
|
};
|
2016-01-17 18:39:07 +01:00
|
|
|
const obj4 = Object.create(obj1);
|
|
|
|
|
|
|
|
assert.deepEqual(obj1, obj1);
|
2016-11-08 21:04:57 +01:00
|
|
|
// OK, object is equal to itself
|
2016-01-17 18:39:07 +01:00
|
|
|
|
|
|
|
assert.deepEqual(obj1, obj2);
|
2016-11-08 21:04:57 +01:00
|
|
|
// AssertionError: { a: { b: 1 } } deepEqual { a: { b: 2 } }
|
|
|
|
// values of b are different
|
2016-01-17 18:39:07 +01:00
|
|
|
|
|
|
|
assert.deepEqual(obj1, obj3);
|
2016-11-08 21:04:57 +01:00
|
|
|
// OK, objects are equal
|
2016-01-17 18:39:07 +01:00
|
|
|
|
|
|
|
assert.deepEqual(obj1, obj4);
|
2016-11-08 21:04:57 +01:00
|
|
|
// AssertionError: { a: { b: 1 } } deepEqual {}
|
|
|
|
// Prototypes are ignored
|
2016-01-17 18:39:07 +01:00
|
|
|
```
|
2015-12-20 04:08:13 +01:00
|
|
|
|
|
|
|
If the values are not equal, an `AssertionError` is thrown with a `message`
|
|
|
|
property set equal to the value of the `message` parameter. If the `message`
|
2017-09-10 03:36:47 +02:00
|
|
|
parameter is undefined, a default error message is assigned. If the `message`
|
|
|
|
parameter is an instance of an `Error` then it will be thrown instead of the
|
|
|
|
`AssertionError`.
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2015-11-04 16:48:45 +01:00
|
|
|
## assert.deepStrictEqual(actual, expected[, message])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v1.2.0
|
2017-02-21 23:39:15 +01:00
|
|
|
changes:
|
2017-08-19 07:54:49 +02:00
|
|
|
- version: REPLACEME
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/15036
|
|
|
|
description: NaN is now compared using the [SameValueZero][] comparison.
|
2017-08-19 07:39:03 +02:00
|
|
|
- version: REPLACEME
|
2017-08-26 00:18:23 +02:00
|
|
|
pr-url: https://github.com/nodejs/node/pull/15001
|
2017-09-10 04:58:50 +02:00
|
|
|
- version: v8.5.0
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/12142
|
2017-08-19 07:39:03 +02:00
|
|
|
description: Error names and messages are now properly compared
|
2017-03-16 04:26:14 +01:00
|
|
|
- version: v8.0.0
|
2017-03-31 05:46:07 +02:00
|
|
|
pr-url: https://github.com/nodejs/node/pull/12142
|
|
|
|
description: Set and Map content is also compared
|
2017-02-21 23:39:15 +01:00
|
|
|
- version: v6.4.0, v4.7.1
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/8002
|
|
|
|
description: Typed array slices are handled correctly now.
|
|
|
|
- version: v6.1.0
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/6432
|
|
|
|
description: Objects with circular references can be used as inputs now.
|
|
|
|
- version: v5.10.1, v4.4.3
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/5910
|
|
|
|
description: Handle non-`Uint8Array` typed arrays correctly.
|
2016-05-11 08:08:33 +02:00
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `actual` {any}
|
|
|
|
* `expected` {any}
|
|
|
|
* `message` {any}
|
2015-11-04 16:48:45 +01:00
|
|
|
|
2017-08-27 03:44:07 +02:00
|
|
|
Generally identical to `assert.deepEqual()` with a few exceptions:
|
2017-02-02 23:02:29 +01:00
|
|
|
|
2017-08-19 07:54:49 +02:00
|
|
|
1. Primitive values besides `NaN` are compared using the [Strict Equality
|
|
|
|
Comparison][] ( `===` ). Set and Map values, Map keys and `NaN` are compared
|
|
|
|
using the [SameValueZero][] comparison (which means they are free of the
|
|
|
|
[caveats][]).
|
2017-02-02 23:02:29 +01:00
|
|
|
2. [`[[Prototype]]`][prototype-spec] of objects are compared using
|
|
|
|
the [Strict Equality Comparison][] too.
|
2017-01-31 20:51:54 +01:00
|
|
|
3. [Type tags][Object.prototype.toString()] of objects should be the same.
|
2017-08-27 03:44:07 +02:00
|
|
|
4. [Object wrappers][] are compared both as objects and unwrapped values.
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const assert = require('assert');
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2017-06-01 01:07:25 +02:00
|
|
|
assert.deepEqual({ a: 1 }, { a: '1' });
|
2016-11-08 21:04:57 +01:00
|
|
|
// OK, because 1 == '1'
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2017-06-01 01:07:25 +02:00
|
|
|
assert.deepStrictEqual({ a: 1 }, { a: '1' });
|
2016-11-08 21:04:57 +01:00
|
|
|
// AssertionError: { a: 1 } deepStrictEqual { a: '1' }
|
|
|
|
// because 1 !== '1' using strict equality
|
2017-01-31 20:51:54 +01:00
|
|
|
|
|
|
|
// The following objects don't have own properties
|
|
|
|
const date = new Date();
|
|
|
|
const object = {};
|
|
|
|
const fakeDate = {};
|
|
|
|
|
|
|
|
Object.setPrototypeOf(fakeDate, Date.prototype);
|
|
|
|
|
|
|
|
assert.deepEqual(object, fakeDate);
|
|
|
|
// OK, doesn't check [[Prototype]]
|
|
|
|
assert.deepStrictEqual(object, fakeDate);
|
|
|
|
// AssertionError: {} deepStrictEqual Date {}
|
|
|
|
// Different [[Prototype]]
|
|
|
|
|
|
|
|
assert.deepEqual(date, fakeDate);
|
|
|
|
// OK, doesn't check type tags
|
|
|
|
assert.deepStrictEqual(date, fakeDate);
|
|
|
|
// AssertionError: 2017-03-11T14:25:31.849Z deepStrictEqual Date {}
|
|
|
|
// Different type tags
|
2017-08-27 03:44:07 +02:00
|
|
|
|
2017-08-19 07:54:49 +02:00
|
|
|
assert.deepStrictEqual(NaN, NaN);
|
|
|
|
// OK, because of the SameValueZero comparison
|
2017-08-27 03:44:07 +02:00
|
|
|
|
|
|
|
assert.deepStrictEqual(new Number(1), new Number(2));
|
|
|
|
// Fails because the wrapped number is unwrapped and compared as well.
|
|
|
|
assert.deepStrictEqual(new String('foo'), Object('foo'));
|
|
|
|
// OK because the object and the string are identical when unwrapped.
|
2016-01-17 18:39:07 +01:00
|
|
|
```
|
2015-12-20 04:08:13 +01:00
|
|
|
|
|
|
|
If the values are not equal, an `AssertionError` is thrown with a `message`
|
|
|
|
property set equal to the value of the `message` parameter. If the `message`
|
2017-09-10 03:36:47 +02:00
|
|
|
parameter is undefined, a default error message is assigned. If the `message`
|
|
|
|
parameter is an instance of an `Error` then it will be thrown instead of the
|
|
|
|
`AssertionError`.
|
2015-11-04 16:48:45 +01:00
|
|
|
|
|
|
|
## assert.doesNotThrow(block[, error][, message])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.21
|
2017-02-21 23:39:15 +01:00
|
|
|
changes:
|
|
|
|
- version: v5.11.0, v4.4.5
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/2407
|
|
|
|
description: The `message` parameter is respected now.
|
|
|
|
- version: v4.2.0
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/3276
|
|
|
|
description: The `error` parameter can now be an arrow function.
|
2016-05-11 08:08:33 +02:00
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `block` {Function}
|
|
|
|
* `error` {RegExp|Function}
|
|
|
|
* `message` {any}
|
2015-11-04 16:48:45 +01:00
|
|
|
|
2015-12-20 04:08:13 +01:00
|
|
|
Asserts that the function `block` does not throw an error. See
|
|
|
|
[`assert.throws()`][] for more details.
|
|
|
|
|
|
|
|
When `assert.doesNotThrow()` is called, it will immediately call the `block`
|
|
|
|
function.
|
|
|
|
|
|
|
|
If an error is thrown and it is the same type as that specified by the `error`
|
|
|
|
parameter, then an `AssertionError` is thrown. If the error is of a different
|
|
|
|
type, or if the `error` parameter is undefined, the error is propagated back
|
|
|
|
to the caller.
|
2015-11-04 16:48:45 +01:00
|
|
|
|
2015-12-20 04:08:13 +01:00
|
|
|
The following, for instance, will throw the [`TypeError`][] because there is no
|
|
|
|
matching error type in the assertion:
|
2015-11-04 16:48:45 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
assert.doesNotThrow(
|
2016-01-24 10:15:51 +01:00
|
|
|
() => {
|
2016-01-17 18:39:07 +01:00
|
|
|
throw new TypeError('Wrong value');
|
|
|
|
},
|
|
|
|
SyntaxError
|
|
|
|
);
|
|
|
|
```
|
2015-11-04 16:48:45 +01:00
|
|
|
|
2015-12-20 04:08:13 +01:00
|
|
|
However, the following will result in an `AssertionError` with the message
|
|
|
|
'Got unwanted exception (TypeError)..':
|
2015-11-04 16:48:45 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
assert.doesNotThrow(
|
2016-01-24 10:15:51 +01:00
|
|
|
() => {
|
2016-01-17 18:39:07 +01:00
|
|
|
throw new TypeError('Wrong value');
|
|
|
|
},
|
|
|
|
TypeError
|
|
|
|
);
|
|
|
|
```
|
2015-11-04 16:48:45 +01:00
|
|
|
|
2015-12-20 04:08:13 +01:00
|
|
|
If an `AssertionError` is thrown and a value is provided for the `message`
|
|
|
|
parameter, the value of `message` will be appended to the `AssertionError`
|
|
|
|
message:
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
assert.doesNotThrow(
|
2016-01-24 10:15:51 +01:00
|
|
|
() => {
|
2016-01-17 18:39:07 +01:00
|
|
|
throw new TypeError('Wrong value');
|
|
|
|
},
|
|
|
|
TypeError,
|
|
|
|
'Whoops'
|
|
|
|
);
|
|
|
|
// Throws: AssertionError: Got unwanted exception (TypeError). Whoops
|
|
|
|
```
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2015-11-04 16:48:45 +01:00
|
|
|
## assert.equal(actual, expected[, message])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.21
|
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `actual` {any}
|
|
|
|
* `expected` {any}
|
|
|
|
* `message` {any}
|
2015-11-04 16:48:45 +01:00
|
|
|
|
2015-12-20 04:08:13 +01:00
|
|
|
Tests shallow, coercive equality between the `actual` and `expected` parameters
|
2017-02-02 23:02:29 +01:00
|
|
|
using the [Abstract Equality Comparison][] ( `==` ).
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const assert = require('assert');
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.equal(1, 1);
|
2016-11-08 21:04:57 +01:00
|
|
|
// OK, 1 == 1
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.equal(1, '1');
|
2016-11-08 21:04:57 +01:00
|
|
|
// OK, 1 == '1'
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.equal(1, 2);
|
2016-11-08 21:04:57 +01:00
|
|
|
// AssertionError: 1 == 2
|
2017-06-01 01:07:25 +02:00
|
|
|
assert.equal({ a: { b: 1 } }, { a: { b: 1 } });
|
2016-11-08 21:04:57 +01:00
|
|
|
//AssertionError: { a: { b: 1 } } == { a: { b: 1 } }
|
2016-01-17 18:39:07 +01:00
|
|
|
```
|
2015-12-20 04:08:13 +01:00
|
|
|
|
|
|
|
If the values are not equal, an `AssertionError` is thrown with a `message`
|
|
|
|
property set equal to the value of the `message` parameter. If the `message`
|
2017-09-10 03:36:47 +02:00
|
|
|
parameter is undefined, a default error message is assigned. If the `message`
|
|
|
|
parameter is an instance of an `Error` then it will be thrown instead of the
|
|
|
|
`AssertionError`.
|
2015-11-04 16:48:45 +01:00
|
|
|
|
2017-06-29 01:57:02 +02:00
|
|
|
## assert.fail([message])
|
2017-07-02 18:06:35 +02:00
|
|
|
## assert.fail(actual, expected[, message[, operator[, stackStartFunction]]])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.21
|
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `actual` {any}
|
|
|
|
* `expected` {any}
|
2017-06-29 01:57:02 +02:00
|
|
|
* `message` {any} (default: 'Failed')
|
2017-04-09 19:36:14 +02:00
|
|
|
* `operator` {string} (default: '!=')
|
2017-07-02 18:06:35 +02:00
|
|
|
* `stackStartFunction` {function} (default: `assert.fail`)
|
2015-11-04 16:48:45 +01:00
|
|
|
|
2015-12-20 04:08:13 +01:00
|
|
|
Throws an `AssertionError`. If `message` is falsy, the error message is set as
|
2017-09-10 03:36:47 +02:00
|
|
|
the values of `actual` and `expected` separated by the provided `operator`. If
|
|
|
|
the `message` parameter is an instance of an `Error` then it will be thrown
|
|
|
|
instead of the `AssertionError`. If just the two `actual` and `expected`
|
|
|
|
arguments are provided, `operator` will default to `'!='`. If `message` is
|
|
|
|
provided only it will be used as the error message, the other arguments will be
|
|
|
|
stored as properties on the thrown object. If `stackStartFunction` is provided,
|
|
|
|
all stack frames above that function will be removed from stacktrace (see
|
|
|
|
[`Error.captureStackTrace`]). If no arguments are given, the default message
|
|
|
|
`Failed` will be used.
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const assert = require('assert');
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.fail(1, 2, undefined, '>');
|
2017-07-02 18:06:35 +02:00
|
|
|
// AssertionError [ERR_ASSERTION]: 1 > 2
|
|
|
|
|
|
|
|
assert.fail(1, 2, 'fail');
|
|
|
|
// AssertionError [ERR_ASSERTION]: fail
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.fail(1, 2, 'whoops', '>');
|
2017-07-02 18:06:35 +02:00
|
|
|
// AssertionError [ERR_ASSERTION]: whoops
|
2017-09-10 03:36:47 +02:00
|
|
|
|
|
|
|
assert.fail(1, 2, new TypeError('need array'));
|
|
|
|
// TypeError: need array
|
2017-07-02 18:06:35 +02:00
|
|
|
```
|
|
|
|
|
|
|
|
*Note*: Is the last two cases `actual`, `expected`, and `operator` have no
|
|
|
|
influence on the error message.
|
|
|
|
|
|
|
|
```js
|
|
|
|
assert.fail();
|
|
|
|
// AssertionError [ERR_ASSERTION]: Failed
|
2017-04-09 19:36:14 +02:00
|
|
|
|
|
|
|
assert.fail('boom');
|
2017-07-02 18:06:35 +02:00
|
|
|
// AssertionError [ERR_ASSERTION]: boom
|
2017-04-09 19:36:14 +02:00
|
|
|
|
|
|
|
assert.fail('a', 'b');
|
2017-07-02 18:06:35 +02:00
|
|
|
// AssertionError [ERR_ASSERTION]: 'a' != 'b'
|
|
|
|
```
|
2017-06-29 01:57:02 +02:00
|
|
|
|
2017-07-02 18:06:35 +02:00
|
|
|
Example use of `stackStartFunction` for truncating the exception's stacktrace:
|
|
|
|
```js
|
|
|
|
function suppressFrame() {
|
|
|
|
assert.fail('a', 'b', undefined, '!==', suppressFrame);
|
|
|
|
}
|
|
|
|
suppressFrame();
|
|
|
|
// AssertionError [ERR_ASSERTION]: 'a' !== 'b'
|
|
|
|
// at repl:1:1
|
|
|
|
// at ContextifyScript.Script.runInThisContext (vm.js:44:33)
|
|
|
|
// ...
|
2016-01-17 18:39:07 +01:00
|
|
|
```
|
2015-11-04 16:48:45 +01:00
|
|
|
|
|
|
|
## assert.ifError(value)
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.97
|
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `value` {any}
|
2015-11-04 16:48:45 +01:00
|
|
|
|
|
|
|
Throws `value` if `value` is truthy. This is useful when testing the `error`
|
|
|
|
argument in callbacks.
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const assert = require('assert');
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-11-08 21:04:57 +01:00
|
|
|
assert.ifError(0);
|
|
|
|
// OK
|
|
|
|
assert.ifError(1);
|
|
|
|
// Throws 1
|
|
|
|
assert.ifError('error');
|
|
|
|
// Throws 'error'
|
|
|
|
assert.ifError(new Error());
|
|
|
|
// Throws Error
|
2016-01-17 18:39:07 +01:00
|
|
|
```
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## assert.notDeepEqual(actual, expected[, message])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.21
|
2017-08-26 00:18:23 +02:00
|
|
|
changes:
|
|
|
|
- version: REPLACEME
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/15001
|
|
|
|
description: Error names and messages are now properly compared
|
|
|
|
- version: v8.0.0
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/12142
|
|
|
|
description: Set and Map content is also compared
|
|
|
|
- version: v6.4.0, v4.7.1
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/8002
|
|
|
|
description: Typed array slices are handled correctly now.
|
|
|
|
- version: v6.1.0, v4.5.0
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/6432
|
|
|
|
description: Objects with circular references can be used as inputs now.
|
|
|
|
- version: v5.10.1, v4.4.3
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/5910
|
|
|
|
description: Handle non-`Uint8Array` typed arrays correctly.
|
2016-05-11 08:08:33 +02:00
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `actual` {any}
|
|
|
|
* `expected` {any}
|
|
|
|
* `message` {any}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2016-01-30 20:12:55 +01:00
|
|
|
Tests for any deep inequality. Opposite of [`assert.deepEqual()`][].
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const assert = require('assert');
|
|
|
|
|
|
|
|
const obj1 = {
|
2017-04-21 16:38:31 +02:00
|
|
|
a: {
|
|
|
|
b: 1
|
2016-01-17 18:39:07 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
const obj2 = {
|
2017-04-21 16:38:31 +02:00
|
|
|
a: {
|
|
|
|
b: 2
|
2016-01-17 18:39:07 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
const obj3 = {
|
2017-04-21 16:38:31 +02:00
|
|
|
a: {
|
|
|
|
b: 1
|
2016-01-17 18:39:07 +01:00
|
|
|
}
|
2016-07-29 05:27:45 +02:00
|
|
|
};
|
2016-01-17 18:39:07 +01:00
|
|
|
const obj4 = Object.create(obj1);
|
|
|
|
|
2016-01-30 16:47:14 +01:00
|
|
|
assert.notDeepEqual(obj1, obj1);
|
2016-11-08 21:04:57 +01:00
|
|
|
// AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
|
2016-01-17 18:39:07 +01:00
|
|
|
|
2016-01-30 16:47:14 +01:00
|
|
|
assert.notDeepEqual(obj1, obj2);
|
2016-11-08 21:04:57 +01:00
|
|
|
// OK, obj1 and obj2 are not deeply equal
|
2016-01-17 18:39:07 +01:00
|
|
|
|
2016-01-30 16:47:14 +01:00
|
|
|
assert.notDeepEqual(obj1, obj3);
|
2016-11-08 21:04:57 +01:00
|
|
|
// AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
|
2016-01-17 18:39:07 +01:00
|
|
|
|
2016-01-30 16:47:14 +01:00
|
|
|
assert.notDeepEqual(obj1, obj4);
|
2016-11-08 21:04:57 +01:00
|
|
|
// OK, obj1 and obj2 are not deeply equal
|
2016-01-17 18:39:07 +01:00
|
|
|
```
|
2015-12-20 04:08:13 +01:00
|
|
|
|
|
|
|
If the values are deeply equal, an `AssertionError` is thrown with a `message`
|
|
|
|
property set equal to the value of the `message` parameter. If the `message`
|
2017-09-10 03:36:47 +02:00
|
|
|
parameter is undefined, a default error message is assigned. If the `message`
|
|
|
|
parameter is an instance of an `Error` then it will be thrown instead of the
|
|
|
|
`AssertionError`.
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2015-11-04 16:48:45 +01:00
|
|
|
## assert.notDeepStrictEqual(actual, expected[, message])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v1.2.0
|
2017-08-26 00:18:23 +02:00
|
|
|
changes:
|
2017-08-19 07:54:49 +02:00
|
|
|
- version: REPLACEME
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/15036
|
|
|
|
description: NaN is now compared using the [SameValueZero][] comparison.
|
2017-08-26 00:18:23 +02:00
|
|
|
- version: REPLACEME
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/15001
|
|
|
|
description: Error names and messages are now properly compared
|
|
|
|
- version: v8.0.0
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/12142
|
|
|
|
description: Set and Map content is also compared
|
|
|
|
- version: v6.4.0, v4.7.1
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/8002
|
|
|
|
description: Typed array slices are handled correctly now.
|
|
|
|
- version: v6.1.0
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/6432
|
|
|
|
description: Objects with circular references can be used as inputs now.
|
|
|
|
- version: v5.10.1, v4.4.3
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/5910
|
|
|
|
description: Handle non-`Uint8Array` typed arrays correctly.
|
2016-05-11 08:08:33 +02:00
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `actual` {any}
|
|
|
|
* `expected` {any}
|
|
|
|
* `message` {any}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2016-01-30 20:12:55 +01:00
|
|
|
Tests for deep strict inequality. Opposite of [`assert.deepStrictEqual()`][].
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const assert = require('assert');
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2017-06-01 01:07:25 +02:00
|
|
|
assert.notDeepEqual({ a: 1 }, { a: '1' });
|
2016-11-08 21:04:57 +01:00
|
|
|
// AssertionError: { a: 1 } notDeepEqual { a: '1' }
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2017-06-01 01:07:25 +02:00
|
|
|
assert.notDeepStrictEqual({ a: 1 }, { a: '1' });
|
2016-11-08 21:04:57 +01:00
|
|
|
// OK
|
2016-01-17 18:39:07 +01:00
|
|
|
```
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2017-09-10 03:36:47 +02:00
|
|
|
If the values are deeply and strictly equal, an `AssertionError` is thrown with
|
|
|
|
a `message` property set equal to the value of the `message` parameter. If the
|
|
|
|
`message` parameter is undefined, a default error message is assigned. If the
|
|
|
|
`message` parameter is an instance of an `Error` then it will be thrown instead
|
|
|
|
of the `AssertionError`.
|
2015-11-04 16:48:45 +01:00
|
|
|
|
|
|
|
## assert.notEqual(actual, expected[, message])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.21
|
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `actual` {any}
|
|
|
|
* `expected` {any}
|
|
|
|
* `message` {any}
|
2015-11-04 16:48:45 +01:00
|
|
|
|
2017-02-02 23:02:29 +01:00
|
|
|
Tests shallow, coercive inequality with the [Abstract Equality Comparison][]
|
2015-11-04 16:48:45 +01:00
|
|
|
( `!=` ).
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const assert = require('assert');
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.notEqual(1, 2);
|
2016-11-08 21:04:57 +01:00
|
|
|
// OK
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.notEqual(1, 1);
|
2016-11-08 21:04:57 +01:00
|
|
|
// AssertionError: 1 != 1
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.notEqual(1, '1');
|
2016-11-08 21:04:57 +01:00
|
|
|
// AssertionError: 1 != '1'
|
2016-01-17 18:39:07 +01:00
|
|
|
```
|
2015-12-20 04:08:13 +01:00
|
|
|
|
|
|
|
If the values are equal, an `AssertionError` is thrown with a `message`
|
|
|
|
property set equal to the value of the `message` parameter. If the `message`
|
2017-09-10 03:36:47 +02:00
|
|
|
parameter is undefined, a default error message is assigned. If the `message`
|
|
|
|
parameter is an instance of an `Error` then it will be thrown instead of the
|
|
|
|
`AssertionError`.
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## assert.notStrictEqual(actual, expected[, message])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.21
|
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `actual` {any}
|
|
|
|
* `expected` {any}
|
|
|
|
* `message` {any}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2017-02-02 23:02:29 +01:00
|
|
|
Tests strict inequality as determined by the [Strict Equality Comparison][]
|
2015-09-18 08:17:15 +02:00
|
|
|
( `!==` ).
|
2015-01-28 17:48:56 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const assert = require('assert');
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.notStrictEqual(1, 2);
|
2016-11-08 21:04:57 +01:00
|
|
|
// OK
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.notStrictEqual(1, 1);
|
2016-11-20 03:20:35 +01:00
|
|
|
// AssertionError: 1 !== 1
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.notStrictEqual(1, '1');
|
2016-11-08 21:04:57 +01:00
|
|
|
// OK
|
2016-01-17 18:39:07 +01:00
|
|
|
```
|
2015-12-20 04:08:13 +01:00
|
|
|
|
|
|
|
If the values are strictly equal, an `AssertionError` is thrown with a
|
|
|
|
`message` property set equal to the value of the `message` parameter. If the
|
2017-09-10 03:36:47 +02:00
|
|
|
`message` parameter is undefined, a default error message is assigned. If the
|
|
|
|
`message` parameter is an instance of an `Error` then it will be thrown instead
|
|
|
|
of the `AssertionError`.
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-26 04:56:21 +01:00
|
|
|
## assert.ok(value[, message])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.21
|
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `value` {any}
|
|
|
|
* `message` {any}
|
2016-01-26 04:56:21 +01:00
|
|
|
|
|
|
|
Tests if `value` is truthy. It is equivalent to
|
|
|
|
`assert.equal(!!value, true, message)`.
|
|
|
|
|
|
|
|
If `value` is not truthy, an `AssertionError` is thrown with a `message`
|
|
|
|
property set equal to the value of the `message` parameter. If the `message`
|
2017-09-10 03:36:47 +02:00
|
|
|
parameter is `undefined`, a default error message is assigned. If the `message`
|
|
|
|
parameter is an instance of an `Error` then it will be thrown instead of the
|
|
|
|
`AssertionError`.
|
2016-01-26 04:56:21 +01:00
|
|
|
|
|
|
|
```js
|
|
|
|
const assert = require('assert');
|
|
|
|
|
2016-11-08 21:04:57 +01:00
|
|
|
assert.ok(true);
|
|
|
|
// OK
|
|
|
|
assert.ok(1);
|
|
|
|
// OK
|
2016-01-26 04:56:21 +01:00
|
|
|
assert.ok(false);
|
2016-11-08 21:04:57 +01:00
|
|
|
// throws "AssertionError: false == true"
|
2016-01-26 04:56:21 +01:00
|
|
|
assert.ok(0);
|
2016-11-08 21:04:57 +01:00
|
|
|
// throws "AssertionError: 0 == true"
|
2016-01-26 04:56:21 +01:00
|
|
|
assert.ok(false, 'it\'s false');
|
2016-11-08 21:04:57 +01:00
|
|
|
// throws "AssertionError: it's false"
|
2016-01-26 04:56:21 +01:00
|
|
|
```
|
|
|
|
|
2015-11-04 16:48:45 +01:00
|
|
|
## assert.strictEqual(actual, expected[, message])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.21
|
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `actual` {any}
|
|
|
|
* `expected` {any}
|
|
|
|
* `message` {any}
|
2015-01-28 17:48:56 +01:00
|
|
|
|
2017-02-02 23:02:29 +01:00
|
|
|
Tests strict equality as determined by the [Strict Equality Comparison][]
|
|
|
|
( `===` ).
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
const assert = require('assert');
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.strictEqual(1, 2);
|
2016-11-08 21:04:57 +01:00
|
|
|
// AssertionError: 1 === 2
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.strictEqual(1, 1);
|
2016-11-08 21:04:57 +01:00
|
|
|
// OK
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
assert.strictEqual(1, '1');
|
2016-11-08 21:04:57 +01:00
|
|
|
// AssertionError: 1 === '1'
|
2016-01-17 18:39:07 +01:00
|
|
|
```
|
2015-12-20 04:08:13 +01:00
|
|
|
|
|
|
|
If the values are not strictly equal, an `AssertionError` is thrown with a
|
|
|
|
`message` property set equal to the value of the `message` parameter. If the
|
2017-09-10 03:36:47 +02:00
|
|
|
`message` parameter is undefined, a default error message is assigned. If the
|
|
|
|
`message` parameter is an instance of an `Error` then it will be thrown instead
|
|
|
|
of the `AssertionError`.
|
2015-12-20 04:08:13 +01:00
|
|
|
|
2014-09-30 01:32:34 +02:00
|
|
|
## assert.throws(block[, error][, message])
|
2016-05-11 08:08:33 +02:00
|
|
|
<!-- YAML
|
|
|
|
added: v0.1.21
|
2017-02-21 23:39:15 +01:00
|
|
|
changes:
|
|
|
|
- version: v4.2.0
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/3276
|
|
|
|
description: The `error` parameter can now be an arrow function.
|
2016-05-11 08:08:33 +02:00
|
|
|
-->
|
2017-02-25 08:17:53 +01:00
|
|
|
* `block` {Function}
|
|
|
|
* `error` {RegExp|Function}
|
|
|
|
* `message` {any}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2016-04-03 21:11:10 +02:00
|
|
|
Expects the function `block` to throw an error.
|
|
|
|
|
|
|
|
If specified, `error` can be a constructor, [`RegExp`][], or validation
|
|
|
|
function.
|
|
|
|
|
|
|
|
If specified, `message` will be the message provided by the `AssertionError` if
|
|
|
|
the block fails to throw.
|
2010-12-02 20:07:47 +01:00
|
|
|
|
|
|
|
Validate instanceof using constructor:
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
assert.throws(
|
2016-01-24 10:15:51 +01:00
|
|
|
() => {
|
2016-01-17 18:39:07 +01:00
|
|
|
throw new Error('Wrong value');
|
|
|
|
},
|
|
|
|
Error
|
|
|
|
);
|
|
|
|
```
|
2010-12-02 20:07:47 +01:00
|
|
|
|
2015-11-28 00:30:32 +01:00
|
|
|
Validate error message using [`RegExp`][]:
|
2010-12-02 20:07:47 +01:00
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
assert.throws(
|
2016-01-24 10:15:51 +01:00
|
|
|
() => {
|
2016-01-17 18:39:07 +01:00
|
|
|
throw new Error('Wrong value');
|
|
|
|
},
|
|
|
|
/value/
|
|
|
|
);
|
|
|
|
```
|
2010-12-02 20:07:47 +01:00
|
|
|
|
|
|
|
Custom error validation:
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
```js
|
|
|
|
assert.throws(
|
2016-01-24 10:15:51 +01:00
|
|
|
() => {
|
2016-01-17 18:39:07 +01:00
|
|
|
throw new Error('Wrong value');
|
|
|
|
},
|
|
|
|
function(err) {
|
2017-04-21 16:38:31 +02:00
|
|
|
if ((err instanceof Error) && /value/.test(err)) {
|
2016-01-17 18:39:07 +01:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'unexpected error'
|
|
|
|
);
|
|
|
|
```
|
2015-11-14 04:21:49 +01:00
|
|
|
|
2016-04-03 21:11:10 +02:00
|
|
|
Note that `error` can not be a string. If a string is provided as the second
|
|
|
|
argument, then `error` is assumed to be omitted and the string will be used for
|
|
|
|
`message` instead. This can lead to easy-to-miss mistakes:
|
|
|
|
|
2017-07-30 22:46:34 +02:00
|
|
|
<!-- eslint-disable no-restricted-syntax -->
|
2016-04-03 21:11:10 +02:00
|
|
|
```js
|
|
|
|
// THIS IS A MISTAKE! DO NOT DO THIS!
|
|
|
|
assert.throws(myFunction, 'missing foo', 'did not throw with expected message');
|
|
|
|
|
|
|
|
// Do this instead.
|
|
|
|
assert.throws(myFunction, /missing foo/, 'did not throw with expected message');
|
|
|
|
```
|
|
|
|
|
2017-02-02 23:02:29 +01:00
|
|
|
## Caveats
|
|
|
|
|
|
|
|
For the following cases, consider using ES2015 [`Object.is()`][],
|
|
|
|
which uses the [SameValueZero][] comparison.
|
|
|
|
|
|
|
|
```js
|
|
|
|
const a = 0;
|
|
|
|
const b = -a;
|
|
|
|
assert.notStrictEqual(a, b);
|
|
|
|
// AssertionError: 0 !== -0
|
|
|
|
// Strict Equality Comparison doesn't distinguish between -0 and +0...
|
|
|
|
assert(!Object.is(a, b));
|
|
|
|
// but Object.is() does!
|
|
|
|
|
2017-04-19 06:23:45 +02:00
|
|
|
const str1 = 'foo';
|
|
|
|
const str2 = 'foo';
|
2017-02-02 23:02:29 +01:00
|
|
|
assert.strictEqual(str1 / 1, str2 / 1);
|
|
|
|
// AssertionError: NaN === NaN
|
|
|
|
// Strict Equality Comparison can't be used to check NaN...
|
|
|
|
assert(Object.is(str1 / 1, str2 / 1));
|
|
|
|
// but Object.is() can!
|
|
|
|
```
|
|
|
|
|
|
|
|
For more information, see
|
|
|
|
[MDN's guide on equality comparisons and sameness][mdn-equality-guide].
|
|
|
|
|
2017-05-08 18:30:13 +02:00
|
|
|
[`Error`]: errors.html#errors_class_error
|
2017-07-02 18:06:35 +02:00
|
|
|
[`Error.captureStackTrace`]: errors.html#errors_error_capturestacktrace_targetobject_constructoropt
|
2017-05-08 18:30:13 +02:00
|
|
|
[`Map`]: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map
|
|
|
|
[`Object.is()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
|
|
|
|
[`RegExp`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
|
|
|
|
[`Set`]: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Set
|
|
|
|
[`TypeError`]: errors.html#errors_class_typeerror
|
2016-01-30 20:12:55 +01:00
|
|
|
[`assert.deepEqual()`]: #assert_assert_deepequal_actual_expected_message
|
|
|
|
[`assert.deepStrictEqual()`]: #assert_assert_deepstrictequal_actual_expected_message
|
2016-01-26 04:56:21 +01:00
|
|
|
[`assert.ok()`]: #assert_assert_ok_value_message
|
2015-11-28 00:30:32 +01:00
|
|
|
[`assert.throws()`]: #assert_assert_throws_block_error_message
|
2017-02-02 23:02:29 +01:00
|
|
|
[Abstract Equality Comparison]: https://tc39.github.io/ecma262/#sec-abstract-equality-comparison
|
2017-05-08 18:30:13 +02:00
|
|
|
[Object.prototype.toString()]: https://tc39.github.io/ecma262/#sec-object.prototype.tostring
|
2017-02-02 23:02:29 +01:00
|
|
|
[SameValueZero]: https://tc39.github.io/ecma262/#sec-samevaluezero
|
2017-05-08 18:30:13 +02:00
|
|
|
[Strict Equality Comparison]: https://tc39.github.io/ecma262/#sec-strict-equality-comparison
|
|
|
|
[caveats]: #assert_caveats
|
2017-01-31 20:51:54 +01:00
|
|
|
[enumerable "own" properties]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties
|
2017-05-08 18:30:13 +02:00
|
|
|
[mdn-equality-guide]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness
|
|
|
|
[prototype-spec]: https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots
|
2017-08-27 03:44:07 +02:00
|
|
|
[Object wrappers]: https://developer.mozilla.org/en-US/docs/Glossary/Primitive#Primitive_wrapper_objects_in_JavaScript
|