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

使用NextJS-auth0时Jest报Unexpected Token错误的求助

解决Jest解析@auth0/nextjs-auth0时的ES模块冲突问题

方案1:调整Jest配置,正确转译相关依赖包

问题根源是@auth0/nextjs-auth0依赖的@panva/hkdf使用了ES模块语法,但Jest默认把node_modules里的包排除在转译之外,导致解析失败。你之前的transformIgnorePatterns可能配置方向错误,应该不忽略这些需要转译的包,而非忽略它们。

修改你的Jest配置文件(比如jest.config.js或package.json中的jest字段):

module.exports = {
  // 其他配置项...
  transformIgnorePatterns: [
    '/node_modules/(?!@auth0/nextjs-auth0|@panva/hkdf)'
  ],
  transform: {
    '^.+\\.(js|jsx|ts|tsx)$': ['babel-jest', { presets: ['next/babel'] }]
  }
};

解释:(?!...)是负向断言,代表除@auth0/nextjs-auth0和@panva/hkdf之外的node_modules包都忽略转译,这两个包会被babel-jest转译,适配Jest的CommonJS环境。

方案2:正确Mock @auth0/nextjs-auth0模块

如果转译方案无效,可能是Mock方式有误。可以在测试文件顶部或jest.setup.js中全局Mock:

jest.mock('@auth0/nextjs-auth0', () => ({
  getSession: jest.fn(() => Promise.resolve({ user: { sub: 'test-user-id' } }))
  // 你代码中用到的其他该包方法,也可在此Mock
}));

注意避免测试文件中同时引入真实模块与Mock的冲突,直接使用全局Mock或在测试文件开头执行Mock操作即可。

方案3:升级Jest及相关依赖

若你的Jest版本较旧,对ES模块的支持不完善,可以尝试升级Jest到最新稳定版,同时更新babel-jest、@babel/core等相关依赖,确保版本兼容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:54:54