Search code examples
node.jsunit-testingassert

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...


Solution

  • 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
    [...]