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

Jest Mock模块单个导出函数时出现未定义错误的解决方法

解决Jest Mock模块时functionName未定义的问题

问题根源很明确:你用jest.mock直接替换了整个模块的导出对象,但只在返回值里定义了functionName1,原模块的functionName自然就从导出里消失了,导入后肯定会报未定义错误。给你几个可行的解决办法:

办法一:保留原模块所有导出,仅替换目标函数

用jest.requireActual获取模块的真实导出,再覆盖需要mock的functionName1,这样其他导出都会被保留:

jest.mock('../path', () => {
  // 获取原模块的真实导出内容
  const actualModule = jest.requireActual('../path');
  return {
    // 展开原模块所有导出
    ...actualModule,
    // 替换functionName1为mock函数
    functionName1: jest.fn()
  };
});

办法二:手动在mock中定义所有需要的导出

如果不需要functionName的真实实现,也可以直接在mock对象里手动声明它:

jest.mock('../path', () => {
  return {
    // 可以根据测试需求定义mock实现
    functionName: jest.fn(),
    functionName1: jest.fn()
  };
});

办法三:用spyOn单独mock目标函数

如果只是想替换functionName1的实现,同时保留functionName的真实逻辑,更推荐用jest.spyOn,不用替换整个模块:

import * as Module from '../../module.ts';

// 监听Module导出的functionName1,替换为mock函数
jest.spyOn(Module, 'functionName1').mockImplementation(() => {
  // 这里可以写mock的返回值或逻辑
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:28:20