【问题标题】:Unexpected result from assert.failassert.fail 的意外结果
【发布时间】:2017-10-19 00:04:42
【问题描述】:

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

这是我正在使用的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'

【问题讨论】:

    标签: node.js node-assert


    【解决方案1】:

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

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

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

    【讨论】:

    • 我是 Node.js 新手。我误解了我在使用什么,尽管你是正确的,我想在浏览器(实际上是电子)以及后端使用它。我也一直在寻找源代码,并期待我使用的东西成为标准assert。不过,看起来require('assert') 应该可以在不安装任何东西的情况下工作。我正在学习孤立地处理我的部分项目的技术堆栈,目前正在编写单元测试。我不明白为什么我的assert.fail 异常消息总是错误的。感谢您的回答!
    猜你喜欢
    • 2011-09-15
    • 2012-04-02
    • 2019-05-14
    • 2017-07-11
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多