使用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
相关产品推荐
相关产品推荐

