来自 assert.fail 的意外结果

Unexpected result from assert.fail

我正在使用 assert 模块来抛出先决条件错误。在我看来,基于 documentation assert.fail(message) 应该抛出一个异常,其中 message 属性 只是传入的消息。但是,它被设置为任何消息用单引号括起来,然后是 undefined undefined.

这是我使用的 assert 版本 (1.4.1) 中的错误,这是文档中的错误,还是我的理解有误?

我的代码:

$ cat assert-test.js
assert = require ("assert")

try {
    assert.fail("boom")
}
catch (ex) {
    console.log(ex)
}

$ node assert-test.js 
{ [AssertionError: 'boom' undefined undefined]
  name: 'AssertionError',
  actual: 'boom',
  expected: undefined,
  operator: undefined,
  message: '\'boom\' undefined undefined',
  generatedMessage: true }

这是文档中与我相关的部分。

If message is provided only it will be used as the error message, the other arguments will be stored as properties on the thrown object

这似乎也相关。

Note: Is the last two cases actual, expected, and operator have no influence on the error message.

assert.fail(); // AssertionError [ERR_ASSERTION]: Failed

assert.fail('boom'); // AssertionError [ERR_ASSERTION]: boom

assert.fail('a', 'b'); // AssertionError [ERR_ASSERTION]: 'a' != 'b'

我有点好奇,因为我不知道你所说的 assert v. 1.4.1 是什么意思,因为 assert 是标准 Node 库的一部分。

看起来你正在使用这个:https://www.npmjs.com/package/assert 而不是实际的 Node 版本——我假设你这样做是因为你想在浏览器或其他东西中使用它。

查看 their source code,很明显他们不会尝试模仿当前的节点行为,而是在 [=14] 时打印 actualexpected 的串联=] 未作为 assert.fail() 的第三个参数提供。我不知道这是否是一个错误、故意的,或者他们只是落后于当前版本的 Node(尽管他们没有通过测试这一事实让我怀疑)。但是你是对的,这个模块的行为与当前的 Node 文档不同步,它(至少在 v.8.6.0 中)像我记录的那样工作。