Skip to main content

Assertion testing

Assertion testing in Node.js serves several important purposes, particularly in the context of software development and quality assurance. Assertions are a way to perform checks within your code to verify that something is true at a particular point in the program. If the assertion fails (i.e., the condition evaluates to false), the program can throw an error or halt execution, depending on how the assertion is handled.

The Node.js assert module provides a simple set of assertion tests that can be used to test invariants within your application. It's primarily used for writing tests and validating conditions that you expect in your code. Here's an overview of some of the key features and assertion types provided by the Node.js assert module:

1. Basic Assertions

  • assert(value, [message]): Checks if the value is truthy. If not, throws an AssertionError, optionally with the provided message.
  • assert.ok(value, [message]): Equivalent to assert(value, [message]), used to test if the first argument is truthy.

2. Equality Assertions

  • assert.equal(actual, expected, [message]): Tests shallow, loose equality between the actual and expected parameters using the Abstract Equality Comparison (==).
  • assert.strictEqual(actual, expected, [message]): Tests strict equality, as determined by the Strict Equality Comparison (===).
  • assert.notEqual(actual, expected, [message]): Tests shallow, loose inequality between the actual and expected parameters.
  • assert.notStrictEqual(actual, expected, [message]): Tests strict inequality, as determined by the Strict Equality Comparison.

3. Deep Equality Assertions

  • assert.deepEqual(actual, expected, [message]): Tests for deep equality between the actual and expected parameters. It considers object properties.
  • assert.notDeepEqual(actual, expected, [message]): Tests for any deep inequality.
  • assert.deepStrictEqual(actual, expected, [message]): Tests for deep equality like deepEqual but considers strict type equality.
  • assert.notDeepStrictEqual(actual, expected, [message]): Tests for deep strict inequality.

4. Error Handling Assertions

  • assert.throws(block, [error], [message]): Expects the block function to throw an error. Optionally, it can validate the thrown error using the second argument.
  • assert.doesNotThrow(block, [error], [message]): Expects the block function not to throw an error. If an error is thrown and it matches the optional error parameter, the assertion will fail.
  • assert.ifError(value): Throws if the value is truthy. Useful for testing the error argument in callbacks.

5. Class Assertions

  • assert.fail([message]): Throws an AssertionError with the provided message or a default error message.
  • assert.rejects(asyncFn, [error], [message]): Awaits the asyncFn and expects it to reject. Can validate the rejection reason.
  • assert.doesNotReject(asyncFn, [error], [message]): Awaits the asyncFn and expects it not to reject. Can validate the error if it rejects.

These assertions can be used for a wide range of testing needs, from basic truthiness checks to complex deep equality tests and error handling. It's important to note that while the assert module is useful for testing, it's a simple utility module and doesn't provide the extensive testing frameworks or mocking capabilities that other libraries like Mocha, Jest, or Chai might offer.