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

如何Mock导出默认函数?报错configMock.mockReturnValue不是函数

正确Mock默认导出函数的方法

你遇到的问题是因为没有用Jest正确mock目标模块,直接断言原模块的导出为Mock函数是无效的。以下是两种可行的解决方案:

方法1:使用jest.mock自动mock模块

直接用Jest的jest.mock方法mock整个MyConfig模块,默认导出会自动转为jest.Mock类型:

// MyUtil.test.ts
import MyUtil from '../MyUtil';
import getConfig from '../MyConfig';

// 自动mock整个模块,默认导出变为jest.Mock
jest.mock('../MyConfig');

// 类型断言确保TS识别为Mock函数
const mockGetConfig = getConfig as jest.Mock;

describe('tests', () => {
  it('blah', async () => {
    // 设置mock返回值
    mockGetConfig.mockReturnValue('Foo');
    const result = MyUtil.isFoo();
    expect(result).toBe(true); // 可添加断言验证逻辑
  });

  // 可选:清除mock避免测试污染
  afterEach(() => {
    mockGetConfig.mockClear();
  });
});

方法2:手动创建mock函数并替换模块导出

如果需要自定义mock实现,可以手动创建mock函数,再替换模块的默认导出:

// MyUtil.test.ts
import MyUtil from '../MyUtil';
import * as configModule from '../MyConfig';

// 创建自定义jest.Mock函数
const mockGetConfig = jest.fn();

// 替换模块的默认导出
jest.spyOn(configModule, 'default').mockImplementation(mockGetConfig);

describe('tests', () => {
  it('blah', async () => {
    mockGetConfig.mockReturnValue('mock-config');
    const foo = MyUtil.isFoo();
    expect(foo).toBe(false); // 根据返回值验证结果
  });
});

额外注意点

  • 你的MyUtil.ts中调用getConfig()时未传入参数,但原函数getConfig要求接收name参数,这会导致运行时参数不匹配,建议补充参数或调整函数定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:53:00