assert.fail的意外结果

时间:2017-10-19 00:04:42

标签: node.js node-assert

我使用assert模块抛出先决条件错误。在我看来,基于documentationassert.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 }

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

  

如果提供了消息,它将仅用作错误消息,其他参数将作为属性存储在抛出的对象上

这似乎也很重要。

  

注意:最后两种情况是实际的,预期的,而运营商没有   对错误信息的影响。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

查看their source code,很明显他们不会尝试模仿当前的Node行为,而只是在actual时打印expectedmessage的串联未作为assert.fail()的第三个参数提供。我不知道这是一个有意或无意的错误,或者它们只是当前版本的Node的背后(尽管他们的测试失败这一事实让我产生怀疑)。但是你是对的,这个模块的行为与当前的Node文档不同步,后者(至少在v.8.6.0中)对我来说是有效的。