You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jest测试Promise reject代码路径时测试失败如何解决

问题原因

你在第二个测试中await的是未挂载拒绝处理的原始Promise实例p,而非run()方法返回的、已经通过链式调用挂载了catch处理的新Promise。当你调用rejecter()将p标记为拒绝状态后,await p会因为没有对应的拒绝捕获逻辑直接抛出未捕获错误,也就是你看到的thrown: undefined报错。

你在run()中为p挂载的catch只会作用于链式调用返回的新Promise,不会改变原始p本身没有拒绝处理的特性。

修复方案

将测试中等待的对象替换为run()返回的带捕获逻辑的Promise即可,修改后的完整测试代码如下:

// 第一个测试同步修正,避免潜在时序问题
test("it should call with resolved when p resolves", async () => {
    const runPromise = run();
    resolver();
    await runPromise;

    expect(f).toHaveBeenCalledWith("resolved");
});

test("it should call with rejected when p rejects", async () => {
    const runPromise = run();
    rejecter();
    await runPromise;

    expect(f).toHaveBeenCalledWith("rejected");
});

修改后两个测试都会正常通过,f的调用断言也能正确命中。

内容的提问来源于stack exchange,提问作者OliverRadini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:24:07