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

Jest测试中Promise返回undefined值问题排查

问题原因

你的代码存在3个直接导致打印undefined的问题:

  • 首先是connect异步方法没有返回值:所有async声明的函数如果没有显式写return语句,执行完成后默认resolve的值就是undefined。你当前的connect方法仅给this.client赋值,没有返回任何内容,哪怕连接成功也拿不到有效返回值。
  • 其次是多余的Promise包装逻辑无效:你在connection函数里手动创建了Promise,但拿到ddbb.connect()返回的pending状态Promise后直接resolve,本质上没有做任何等待连接完成的处理,逻辑冗余。
  • 最后是Jest异步测试写法错误:你在test回调里写了Promise链式调用,但没有把这个Promise返回给Jest,Jest会在所有同步代码执行完后直接结束测试,不会等待then里的回调执行,就算你后面逻辑写对了,也可能因为测试提前退出拿不到打印结果。
修正步骤
  1. 先修改connect方法,连接完成后返回当前实例:
async connect(){
    this.client = await poolMapping.connect();
    return this;
}
  1. 简化connection函数,去掉多余的Promise包装,因为async函数本身就返回Promise,可以直接返回调用结果:
function connection(){
    const ddbb = new PGMappingDDBB();
    return ddbb.connect();
}
  1. 修改测试用例,将Promise返回给Jest,让测试框架等待异步逻辑执行完成:
test("Test 12: Several searches concurrently", () => {
    return connection().then(ddbb => {
        console.log(ddbb); // 此处可以正常拿到连接完成的PGMappingDDBB实例
        // 后续在这里添加你的业务断言即可
    });
});

如果习惯async/await写法,测试用例也可以写成更简洁的形式:

test("Test 12: Several searches concurrently", async () => {
    const ddbb = await connection();
    console.log(ddbb);
    // 后续写业务断言
});

注意:写Jest异步用例时,要么返回Promise/使用async声明测试回调,要么调用传入的done回调通知测试完成,否则测试会提前退出,导致异步逻辑不执行、断言不生效。

内容的提问来源于stack exchange,提问作者José Carlos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:18:28