何时在Node.js中使用assert.doesNotReject方法

时间:2019-05-13 12:23:58

标签: node.js

当我浏览node.js文档时,我遇到了一个断言包方法调用assert.doesNotReject,据我了解,这与异步代码测试有关,但无法清楚地理解在文档中,谁能向我解释该方法的目的以及何时使用此方法,那么它对于我和其他人也将是有用的(因为我没有找到其他有用的资源)?

1 个答案:

答案 0 :(得分:0)

它用于测试返回的Promise是否被异步拒绝。

尽管,甚至在Node.js documentation中直接提到...

  

使用assert.doesNotReject()实际上没有用,因为捕获拒绝然后再次拒绝没有什么好处。

这类似于捕获错误/异常只是将其再次抛出,而不执行任何错误处理代码。建议在不应拒绝Promise的特定代码路径旁边添加注释。

编辑

您可以尝试在Node中运行以下代码,然后亲自查看输出。

但是,在这种情况下,很明显该函数总是抛出异常,但这只是后者函数中assertDoesNotReject的目标异常。

assertDoesNotReject的固有性质是,如果函数拒绝承诺(使用或不使用assertDoesNotReject进行换行),无论如何都将引发错误。因此,您可以选择处理拒绝所引发的错误,也可以用assertDoesNotReject包装错误,并提供有意义的消息以伴随该异常。

另一种情况是,如果您有一些更高阶的AssertionError捕获逻辑,并且宁愿处理该逻辑,而不是在Promise拒绝后抛出异常。

const assert = require('assert');

(async () => {
    try {
        await assert.doesNotReject(
            async () => {
                throw new TypeError('Wrong value');
            },
            SyntaxError
        );
    } catch (error) {
        console.log(error.stack);
    }
})();

(async () => {
    try {
        await assert.doesNotReject(
            async () => {
                throw new SyntaxError('Some syntax problem');
            },
            SyntaxError
        );
    } catch (error) {
        console.log(error.stack);
    }
})();