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

Next.js中Jest测试GraphQL组件报Unexpected token export错误

问题根因

报错本质是Jest默认跳过node_modules目录下所有文件的语法转译,而你项目依赖链中引入的uuid包,其默认被解析到的浏览器端ESM产物(dist/esm-browser/index.js)使用了ES Module规范的export语法,Jest在Node.js测试环境下默认只识别CommonJS模块语法,无法直接解析ESM格式代码,因此抛出Unexpected token 'export'错误。
你使用的next/jest预设只会处理Next.js框架本身及部分官方依赖的转译,不会覆盖所有第三方ESM依赖,uuid就属于未被默认处理的依赖范畴。

解决方案

方法1:调整转译忽略规则,让Jest处理uuid包

修改jest.config.js,新增transformIgnorePatterns配置,将uuid从默认忽略转译的列表中排除:

const nextJest = require('next/jest')
const createJestConfig = nextJest({
  dir: './',
})

const customJestConfig = {
  setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
  moduleNameMapper: {
    '^@components/(.*)$': '<rootDir>/components/$1',
    '^@utils/(.*)$': '<rootDir>/utils/$1',
    '^@graphql/(.*)$': '<rootDir>/graphql/$1',
  },
  collectCoverageFrom: ['./components/**/*.{js,jsx}'],
  moduleDirectories: ['node_modules', '<rootDir>/'],
  testEnvironment: 'jest-environment-jsdom',
  // 新增配置:转译node_modules下的uuid包
  transformIgnorePatterns: [
    '/node_modules/(?!uuid)/'
  ]
}

module.exports = createJestConfig(customJestConfig)

如果后续其他第三方ESM依赖报同类语法错误,直接把对应包名用|分隔追加到规则里即可,格式为(?!uuid|package-a|package-b)。

方法2:强制映射uuid到CommonJS版本

如果方法1不生效,可以直接通过模块别名,把uuid的导入路径强制指向它的CommonJS产物,从根源上跳过ESM文件的加载:
在已有的moduleNameMapper配置中追加一条规则:

moduleNameMapper: {
  '^@components/(.*)$': '<rootDir>/components/$1',
  '^@utils/(.*)$': '<rootDir>/utils/$1',
  '^@graphql/(.*)$': '<rootDir>/graphql/$1',
  // 新增uuid映射规则
  '^uuid$': '<rootDir>/node_modules/uuid/dist/index.js'
}
额外注意事项

你当前的测试用例存在两个潜在问题,修复转译问题后可能会遇到:

  • MockedProvider对请求的匹配是严格校验query和variables的,你当前mock配置中写死variables.text为空字符串,但实际组件触发mutation时取的是textarea输入值,后续做交互测试时需要保证mock的variables和实际请求参数完全一致,否则会报“No mocked response found”类错误。
  • 你贴出的组件代码中useMutation、CREATE_POST、GET_USER、Component、Icon都没有显式导入,确认实际代码中这些依赖都已正确引入,否则会触发引用错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:57:27