来自 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] 时打印 actual
、expected
的串联=] 未作为 assert.fail()
的第三个参数提供。我不知道这是否是一个错误、故意的,或者他们只是落后于当前版本的 Node(尽管他们没有通过测试这一事实让我怀疑)。但是你是对的,这个模块的行为与当前的 Node 文档不同步,它(至少在 v.8.6.0 中)像我记录的那样工作。
我正在使用 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] 时打印 actual
、expected
的串联=] 未作为 assert.fail()
的第三个参数提供。我不知道这是否是一个错误、故意的,或者他们只是落后于当前版本的 Node(尽管他们没有通过测试这一事实让我怀疑)。但是你是对的,这个模块的行为与当前的 Node 文档不同步,它(至少在 v.8.6.0 中)像我记录的那样工作。