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

如何测试被测函数是否调用了导入的Promise?

问题分析与解决方法

核心问题

  1. 被测函数functionToTest缺少async关键字:使用await的函数必须声明为async,否则会触发语法错误,导致函数无法正常执行,自然不会调用externalPromise。
  2. 测试代码未等待异步操作完成:即使修复了async问题,直接调用functionToTest()后立即执行断言,Jest会在异步函数的Promise完成前就结束测试,导致断言时机过早。

步骤1:修复被测函数

给functionToTest添加async关键字:

import { externalPromise } from '@helpers';

export const functionToTest = async () => {
  return await externalPromise();
}

步骤2:修正测试代码(三种可选方式)

任选一种让Jest等待异步操作完成的写法:

方式一:使用async/await(最直观)

it('should call externalPromise', async () => {
  await functionToTest();
  expect(externalPromise).toHaveBeenCalled();
});

方式二:返回Promise

让测试函数返回functionToTest的Promise链,Jest会自动等待其完成:

it('should call externalPromise', () => {
  return functionToTest().then(() => {
    expect(externalPromise).toHaveBeenCalled();
  });
});

方式三:使用done回调

适合处理更复杂的异步逻辑,通过done()通知Jest测试结束:

it('should call externalPromise', (done) => {
  functionToTest().then(() => {
    expect(externalPromise).toHaveBeenCalled();
    done();
  });
});

验证mock正确性

你的jest.mock写法是正确的,已经成功将externalPromise替换为Jest模拟函数,修复上述问题后即可正常捕获调用记录。

内容的提问来源于stack exchange,提问作者Tamás Polgár

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:20:30