NextJS中Jest报SyntaxError: Unexpected token 'export'的非Babel解决方法咨询
问题:NextJS + Firebase Auth 上下文在Jest测试中报
SyntaxError: Unexpected token 'export' 我正在测试一个带有Firebase上下文提供者的NextJS页面,其中一个上下文用于初始化Firebase,另一个用于控制对firebase/auth的访问权限。在Auth Context中,我直接导入所需内容:
import { getAuth, User, signInWithEmailAndPassword, createUserWithEmailAndPassword, UserCredential, signOut, signInWithPopup, GoogleAuthProvider, } from "firebase/auth";
Jest测试时抛出如下错误:
SyntaxError: Unexpected token 'export' 15 | createUserWithEmailAndPassword, 16 | UserCredential, > 17 | signOut, | ^ 18 | signInWithPopup, 19 | GoogleAuthProvider, 20 | } from "firebase/auth";
已安装ts-jest,不想在NextJS中使用Babel,寻求其他解决方法。
解决方案
修改Jest配置,转译Firebase相关包
在jest.config.js(或jest.config.ts)中调整transformIgnorePatterns,将Firebase及@firebase开头的包排除在忽略转译列表外,让ts-jest处理这些ES模块:module.exports = { // 其他现有配置 transformIgnorePatterns: [ '/node_modules/(?!firebase|@firebase).+' ] };直接导入Firebase的CommonJS版本
替换原有导入路径,使用Firebase提供的CommonJS入口文件:import { getAuth, User, signInWithEmailAndPassword, createUserWithEmailAndPassword, UserCredential, signOut, signInWithPopup, GoogleAuthProvider, } from "firebase/auth/dist/index.cjs.js";注意:该方式依赖Firebase版本的文件结构,后续版本可能有变动。
Mock Firebase Auth模块(单元测试推荐)
在测试文件中直接Mock Firebase Auth的所有依赖方法,避开实际模块的导入问题,专注测试上下文逻辑:jest.mock('firebase/auth', () => ({ getAuth: jest.fn(), signInWithEmailAndPassword: jest.fn(), createUserWithEmailAndPassword: jest.fn(), signOut: jest.fn(), signInWithPopup: jest.fn(), GoogleAuthProvider: jest.fn().mockImplementation(() => ({})), User: {}, UserCredential: {} }));
内容的提问来源于stack exchange,提问作者Luis
相关产品推荐
相关产品推荐

