gpt4 book ai didi

typescript - 测试异步函数以使用 mocha 抛出

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:13 44 4
gpt4 key购买 nike

我有一个运行 2000 毫秒的异步函数,然后它会抛出异常。我正在尝试使用 Mocha/chai 来准确测试这种行为,但显然我做错了。

这就是我尝试过的:

首先:

expect(publisher.dispatchMessage<ExampleResponseMessage>(message, {}, 2 * 1000)).to.eventually.throw();

这将测试标记为已通过(52 毫秒运行时间),但会在 2 秒后抛出异常。所以显然它根本没有等待该功能的 promise 。

第二:

expect(async () => {
await publisher.dispatchMessage<ExampleResponseMessage>(message, {}, 2 * 1000);
}).to.throw();

测试失败: 应该在预定义的超时后拒绝预定的消息: AssertionError:预期 [Function] 抛出错误 在 Context.mocha_1.it (test\integration\rpc-communication.spec.ts:75:16) 在

预期的行为是测试通过,因为在 2000 毫秒后抛出异常,这在给定的 4000 毫秒测试用例超时内。

附加信息:

这行得通。 promise 因错误而被拒绝(我也可以将其更改为使用字符串拒绝)。这应该证明 dispatchMessage() 正在按预期工作。测试用例耗时 2002ms,然后通过。

    try {
await publisher.dispatchMessage<ExampleResponseMessage>(message, {}, 2 * 1000);
} catch (err) {
expect(err).to.be.an('Error');
}

问题:

如何正确测试异步函数是否抛出异常?

最佳答案

.to.throw() 不应该在 async 函数上工作,因为它不会抛出错误,它会返回被拒绝的 promise 。

该问题特定于 chai-as-promised。如 this issue 中所述, .to.eventually.throw() 不会按预期工作。它断言 promise 解决一个函数,该函数将在调用时同步抛出错误。这可能不是 dispatchMessage 中发生的情况。

这取决于 dispatchMessage 但可能应该是:

expect(publisher.dispatchMessage<ExampleResponseMessage>(message, {}, 2 * 1000))
.to.be.rejected;

关于typescript - 测试异步函数以使用 mocha 抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49970551/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com