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

使用Jest仅通过回调实现异步测试,捕获Promise报错的测试失败如何解决

错误原因

  • 同步try/catch仅能捕获同步执行栈内的错误,你代码中Promise的reject是在setTimeout异步回调中触发的,不属于同步执行上下文,try/catch无法捕获到该异步拒绝错误。
  • 你未给创建的Promise绑定错误处理回调,reject触发后会直接抛出未处理的Promise拒绝异常,Jest会直接判定测试失败,不会进入你编写的catch代码块。

修复方案

给Promise链式调用catch方法,在catch回调中完成断言后调用done通知Jest异步测试结束即可,修复后代码如下:

test('Test unhandled promise rejection', function (done) {
    expect.assertions(1);
    new Promise(function (resolve, reject) {
        setTimeout(function () {
            reject('errorrrrr');
        }, 100);
    }).catch((error) => {
        // 此处可以根据需要调整断言逻辑
        expect(error).toBe('errorrrrr');
        done();
    });
});

补充说明:如果后续使用async/await写法做异步测试,可以用try/catch包裹await语句捕获异步错误,但必须要await对应的Promise实例,否则仍然无法捕获错误。

内容的提问来源于stack exchange,提问作者cj-2307

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:45:03