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