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

如何在不导入整个模块的情况下使用jest.spyOn监听函数?

仅Mock模块单个函数以优化测试性能

方案1:完全Mock目标函数(不加载真实模块)

如果测试仅依赖myFunction,不需要模块的其他逻辑,直接通过jest.mock创建极简Mock模块,彻底避免真实模块的加载与执行,这是性能最优的方案:

// 测试文件顶部声明Mock
jest.mock('my-module', () => ({
  myFunction: jest.fn()
}));

// 单独导入Mock后的函数
import { myFunction } from 'my-module';

test('测试示例', () => {
  myFunction.mockReturnValue(123);
  
  // 执行测试逻辑
  // ...
  
  expect(myFunction).toHaveBeenCalled();
});

方案2:Mock单个函数,保留其他真实导出

如果测试需要用到模块的其他真实功能,仅需Mock目标函数,可以用jest.requireActual保留模块原有导出,仅替换目标函数:

jest.mock('my-module', () => ({
  // 加载模块的真实导出内容
  ...jest.requireActual('my-module'),
  // 将目标函数替换为Mock函数
  myFunction: jest.fn()
}));

// 按需导入需要的内容
import { myFunction, otherRealFunc } from 'my-module';

test('测试示例', () => {
  myFunction.mockReturnValue(123);
  
  // otherRealFunc 会使用模块的真实逻辑
  // ...
});

关键说明

  • 方案1通过跳过真实模块的加载,能最大程度降低测试耗时,适合大多数仅需Mock单个函数的场景。
  • 方案2在保留模块其他功能的同时实现局部Mock,适合依赖模块其他真实逻辑的测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:57:10