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

升级uuid 9.0.1后Jest无法mock v4方法的解决方案咨询

解决uuid 9.0.1 + Jest 29.3.1的v4方法Mock问题

核心问题定位

你当前的导入方式import { uuid } from 'uuid'是错误的——uuid 9.x版本并未导出名为uuid的成员,而是导出v1/v4/v5等方法,这是后续所有Mock报错的根源。

步骤1:修正导入方式

根据使用习惯二选一:

  • 直接导入v4方法并重命名:import { v4 as uuid } from 'uuid'(调用时用uuid())
  • 导入整个uuid模块:import * as uuid from 'uuid'(调用时用uuid.v4())

步骤2:对应Mock方案

方案A:针对单个v4函数导入(import { v4 as uuid } from 'uuid')

在测试文件顶部Mock整个uuid模块,指定v4的Mock实现:

jest.mock('uuid', () => ({
  v4: jest.fn(() => 'mock-fixed-uuid')
}));

import { v4 as uuid } from 'uuid';

test('验证uuid Mock效果', () => {
  expect(uuid()).toBe('mock-fixed-uuid');
  // 动态修改返回值
  uuid.mockReturnValue('mock-new-uuid');
  expect(uuid()).toBe('mock-new-uuid');
});

方案B:针对整个模块导入(import * as uuid from 'uuid')

使用jest.spyOn监听v4方法并替换实现:

import * as uuid from 'uuid';

test('验证uuid Mock效果', () => {
  const mockV4 = jest.spyOn(uuid, 'v4').mockReturnValue('mock-uuid');
  expect(uuid.v4()).toBe('mock-uuid');
  
  // 测试完成后恢复原方法,避免影响其他用例
  mockV4.mockRestore();
});

步骤3:解决"ReferenceError: require is not defined"错误

uuid 9.x是ESM优先模块,需确保Jest配置支持ESM:
在jest.config.js中添加以下配置:

export default {
  testEnvironment: 'node',
  transform: {}, // 禁用默认CommonJS转译(若使用原生ESM)
  moduleFileExtensions: ['js', 'mjs', 'cjs'],
  extensionsToTreatAsEsm: ['.js'] // 标记.js文件为ESM格式
};

若项目使用Babel,需将@babel/preset-env的modules选项设为false,保留ESM语法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:26:32