The notDeepEqual
method of the assert
module in Node.js uses the !=
operator (Abstract Equality Comparison) to check for inequality between two objects.
Deep equality means that the values of child objects are also compared.
The process is illustrated below:
Note: You can view a list of rules for the
!=
operator here.
To use the notDeepEqual
method, you will need to install the assert
module using the command prompt, as shown below:
npm install assert
After the installation is complete, you will need to import the assert
module into the program, as shown below:
const assert = require('assert');
The prototype of the notDeepEqual
method is shown below:
notDeepEqual(actual, expected[, message])
The notDeepEqual
method takes the following parameters:
actual
: The first of the two objects to compare.
expected
: The second of the two objects to compare.
message
: An optional parameter that holds the error message in case of an AssertionError. If this parameter is left empty, a default message is assigned.
If the objects are equal, then the notDeepEqual
method throws an AssertionError
and the program terminates; otherwise, execution continues as normal.
In case of an error, the message
property of the AssertionError
is set equal to the message
parameter. If the message
parameter is not provided, a default value is assigned to the message
property of the AssertionError
.
The code below shows how the notDeepEqual
method works in Node.js:
const assert = require('assert');// initializing objectsconst first = { a : { b : 10 } };const second = { a : { b : 10 } };const third = { a : { b : '10' } };const fourth = { a : { b : 30 } };const fifth = Object.create(first);// evaluating first expressiontry{assert.notDeepEqual(first, second, "Assertion Error: The objects are deep equal.")console.log("No error.")}catch(error){console.log(error.message)}// evaluating second expressiontry{assert.notDeepEqual(first, third, "Assertion Error: The objects are deep equal.")console.log("No error.")}catch(error){console.log(error.message)}// evaluating third expressiontry{assert.notDeepEqual(first, fourth, "Assertion Error: The objects are deep equal.")console.log("No error.")}catch(error){console.log(error.message)}// evaluating fourth expressiontry{assert.notDeepEqual(first, fifth, "Assertion Error: The objects are deep equal.")console.log("No error.")}catch(error){console.log(error.message)}
The code above uses different expressions to show the behavior of the notDeepEqual
method.
First, different objects are initialized. The objects first
and second
are identical. The object third
has the same structure as first
, but third
has a value of type string rather than an integer. Similarly, fourth
also has the same structure as first
, but the value is different, i.e., . Finally, fifth
is a Prototype Object created using first
.
In the first expression in line , the actual
and expected
parameters are identical objects with the value , so an error is thrown, which triggers the catch
branch of the try-catch
block. The code outputs the message associated with the error, i.e., the string provided as the message
parameter to the notDeepEqual
method in line .
In the second expression in line , the actual
and expected
parameters have identical structures but have different types. The actual
parameter is an integer, whereas the expected
parameter is a string. Since the deepEqual
method only checks values, it considers the objects equal and throws an error. The error triggers the catch
branch of the try-catch
block. The code outputs the message associated with the error, i.e., the string provided as the message
parameter to the notDeepEqual
method in line .
In the third expression in line , the actual
and expected
parameters are unequal, so the notDeepEqual
method does not throw any errors. Therefore, only the try
branch of the try-catch
block executes.
Finally, the expression in line involves a comparison with a Prototype
. Since the implementation of the notDeepEqual
method does not test Prototypes
, no error is thrown. Therefore, only the try
branch of the try-catch
block executes.
Note: You can read up further on the
notDeepEqual
method and other similar functions in the official documentation.
Free Resources