2017-10-19 61 views
0

我正在使用assert模块来引发前提条件错误。在我看来,根据documentationassert.fail(message)应该抛出一个异常,其中message属性只是传入的消息。但是,它被设置为任何消息被包装在单引号中,然后是undefined undefined意外的结果来自assert.fail

这是我使用的版本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

我有点好奇,因为我不知道,因为assertassert诉1.4.1的意思是标准节点库的一部分。

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

纵观their source code,很显然他们并没有试图模仿当前节点的行为,而是只打印actualexpected的级联时message不作为第三个参数assert.fail()提供。我不知道这是一个错误,是故意的,还是仅仅落后于当前版本的Node(虽然他们的测试失败让我感到疑惑)。但是你是正确的,这个模块的行为与当前的Node文档不同步,至少在第8.6.0版中,这个文档对我来说是有效的。

+0

我是新来的Node。我误解了我正在使用的内容,尽管我确实希望在浏览器(实际上是Electron)以及后端中使用它。我也一直在讨论源代码,并且转过身来期待我用来*标准的'assert'。它看起来像'require('assert')'应该没有安装任何东西,但是。 我正在学习技术堆栈,对我的部分项目进行隔离,目前正在编写单元测试。我无法弄清楚为什么我的'assert.fail'异常信息总是错误的。 感谢您的回答! –