Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Assert.fail (node.js): what does Operator parameter mean?

Node.js unit-testing module has basic assertion assert.fail:

assert.fail(actual, expected, message, operator)

What does operator mean? I'm really new to unit-testing...

like image 762
esp Avatar asked Jan 12 '13 14:01

esp


People also ask

What does assert do in node JS?

The assert() method tests if a given expression is true or not. If the expression evaluates to 0, or false, an assertion failure is being caused, and the program is terminated. The assert() method is an alias of the assert.

What is assert deepEqual?

The assert. deepEqual() method tests if two objects, and their child objects, are equal, using the == operator. If the two objects are not equal, an assertion failure is being caused, and the program is terminated.

Is assert equal deprecated?

In test codes, assert module's assert. equal are heavily used. It is legacy API and deprecated since Node. js v9.


1 Answers

What the documentation says: The value of operator is being used to separate the values of actual and expected when providing an error message. This is described in Node.js' documentation for the assert module.

But, if you try this in the interactive shell you see that the parameter seems to be ignored:

> assert.fail(23, 42, 'Malfunction in test.', '###')
AssertionError: Malfunction in test.
    at repl:1:9
    at REPLServer.self.eval (repl.js:111:21)
    at Interface.<anonymous> (repl.js:250:12)
    at Interface.EventEmitter.emit (events.js:88:17)
    at Interface._onLine (readline.js:199:10)
    at Interface._line (readline.js:517:8)
    at Interface._ttyWrite (readline.js:735:14)
    at ReadStream.onkeypress (readline.js:98:10)
    at ReadStream.EventEmitter.emit (events.js:115:20)
    at emitKey (readline.js:1057:12)

It all makes sense when you take a look at the implementation of the assert module, lines 101-109:

function fail(actual, expected, message, operator, stackStartFunction) {
  throw new assert.AssertionError({
    message: message,
    actual: actual,
    expected: expected,
    operator: operator,
    stackStartFunction: stackStartFunction
  });
}

So, a better description might be that it is not used automatically in the message, but it can be used if you catch the exception and create an appropriate message yourself. In consequence, this parameter may be useful if you are going to create your own testing framework.

You can force Node.js to use that parameter if you omit the message parameter, e.g. by passing undefined explicitly:

> assert.fail(23, 42, undefined, '###')
AssertionError: 23 ### 42
[...]
like image 101
Golo Roden Avatar answered Sep 21 '22 10:09

Golo Roden