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

求助:Jest 27中__mocks__文件夹在TypeScript下无法正常工作

解决Jest用__mocks__文件夹mock AWS SDK失败的问题

问题根源

  • Mock文件路径错误:你要mock的模块是@aws-sdk/client-sfn,对应的mock文件需放在root/__mocks__/@aws-sdk/client-sfn.ts,而非当前的client-sfn/client-sfn.ts,Jest无法识别非标准路径的mock文件。
  • Mock内容不完整:当前mock文件仅导出两个mock函数,未保留原模块的其他导出。这会导致要么依赖原模块其他内容的代码报错,要么Jest未正确将原函数替换为mock,最终断言时拿到的不是jest.fn()创建的mock函数。

解决步骤

1. 修正Mock文件的路径和内容

将mock文件移动到正确位置,并保留原模块所有导出,仅替换需要mock的部分,和你之前用jest.mock写的逻辑保持一致:

创建root/__mocks__/@aws-sdk/client-sfn.ts,内容如下:

// 加载原模块的真实导出内容
const actualClientSfn = jest.requireActual('@aws-sdk/client-sfn');

// 导出原模块所有内容,同时覆盖需要mock的两个命令
export { ...actualClientSfn };
export const SendTaskSuccessCommand = jest.fn();
export const SendTaskFailureCommand = jest.fn();

2. 在测试文件中启用mock

在需要使用该mock的测试文件顶部添加:

jest.mock('@aws-sdk/client-sfn');

如果所有测试都需要用到这个mock,也可以在jest.config.js的setupFilesAfterEnv中统一配置,无需每个测试文件重复编写。

3. 验证导入方式

确保测试文件中从正确的模块路径导入目标函数:

import { SendTaskSuccessCommand } from '@aws-sdk/client-sfn';

4. 调整Jest配置(可选)

如果项目子目录存在独立的package.json,需确保Jest能找到根目录的__mocks__文件夹,可在jest.config.js中添加:

module.exports = {
  modulePaths: ['<rootDir>'],
  // 其他配置项...
};

测试验证

重新运行测试,此时SendTaskSuccessCommand会是Jest生成的mock函数,toHaveBeenCalledWith断言即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:33:19