我使用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 }
这是与我相关的文档的一部分。
如果提供了消息,它将仅用作错误消息,其他参数将作为属性存储在抛出的对象上
这似乎也很重要。
注意:最后两种情况是实际的,预期的,而运营商没有 对错误信息的影响。
assert.fail(); // AssertionError [ERR_ASSERTION]: Failed assert.fail('boom'); // AssertionError [ERR_ASSERTION]: boom assert.fail('a', 'b'); // AssertionError [ERR_ASSERTION]: 'a' != 'b'
答案 0 :(得分:1)
我有点好奇,因为assert
v.1.4.1我不知道你的意思,因为assert
是标准Node库的一部分。
看起来你正在使用它:https://www.npmjs.com/package/assert而不是实际的Node版本 - 我假设你这样做是因为你想在浏览器或其他东西中使用它。
查看their source code,很明显他们不会尝试模仿当前的Node行为,而只是在actual
时打印expected
,message
的串联未作为assert.fail()
的第三个参数提供。我不知道这是一个有意或无意的错误,或者它们只是当前版本的Node的背后(尽管他们的测试失败这一事实让我产生怀疑)。但是你是对的,这个模块的行为与当前的Node文档不同步,后者(至少在v.8.6.0中)对我来说是有效的。