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

如何用Jest Mock同一文件中被其他命名导出依赖的命名导出

使用Jest Mock uid 函数实现 doubleUid() 返回 foo_foo

完全可以在不修改原文件的前提下实现,核心是利用Jest的模块Mock能力,保留原模块的doubleUid逻辑,仅替换uid函数的实现。

假设原文件名为utils.js,对应的测试文件utils.test.js代码如下:

// 模拟目标模块,保留原doubleUid实现,替换uid为mock函数
jest.mock('./utils', () => {
  const originalModule = jest.requireActual('./utils');
  return {
    ...originalModule,
    uid: jest.fn(() => 'foo')
  };
});

import { doubleUid, uid } from './utils';

test('doubleUid 应返回 foo_foo', () => {
  const result = doubleUid();
  expect(result).toBe('foo_foo');
  // 验证uid被调用了两次
  expect(uid).toHaveBeenCalledTimes(2);
});

实现逻辑说明

  • jest.requireActual('./utils'):获取原模块的真实代码,避免把doubleUid也一起Mock掉
  • 展开原模块的所有导出后,覆盖uid为一个固定返回'foo'的Mock函数
  • 导入模块后执行测试,此时doubleUid内部调用的就是我们Mock后的uid,自然会返回foo_foo

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:40:01