Assert.fail(node.js):运算符参数是什么意思?

esp*_*esp 8 unit-testing assert node.js

Node.js单元测试模块有基本断言assert.fail:

assert.fail(actual, expected, message, operator)
Run Code Online (Sandbox Code Playgroud)

什么operator意思?我是单位测试新手......

Gol*_*den 9

文档说的内容:operator用于分隔actualexpected提供错误消息时的值的值.这在assert模块的 Node.js 文档中有所描述.

但是,如果您在交互式shell中尝试此操作,您会看到该参数似乎被忽略:

> 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)
Run Code Online (Sandbox Code Playgroud)

当你看一下assert模块实现时,这一切都是有意义的,第101-109行:

function fail(actual, expected, message, operator, stackStartFunction) {
  throw new assert.AssertionError({
    message: message,
    actual: actual,
    expected: expected,
    operator: operator,
    stackStartFunction: stackStartFunction
  });
}
Run Code Online (Sandbox Code Playgroud)

因此,更好的描述可能是它不会在消息中自动使用,但如果您捕获异常并自己创建适当的消息,则可以使用它.因此,如果要创建自己的测试框架,此参数可能很有用.

如果省略message参数,可以强制Node.js使用该参数,例如通过undefined显式传递:

> assert.fail(23, 42, undefined, '###')
AssertionError: 23 ### 42
[...]
Run Code Online (Sandbox Code Playgroud)