添加aws-rum-web后Jest报Unexpected token错误,配置无效求助
解决Jest无法解析
web-vitals ES模块语法的问题 问题背景
添加aws-rum-web包后运行Jest测试,出现SyntaxError: Unexpected token 'export'错误——根源是web-vitals使用了ES模块语法,而Jest默认忽略node_modules下的文件转换。已配置transformIgnorePatterns排除web-vitals但问题依旧。
可行解决思路
1. 扩展transformIgnorePatterns范围
aws-rum-web本身可能也包含未被转换的ES模块代码,需要同时把它加入不被忽略的列表:
const esModules = ['web-vitals', 'aws-rum-web'].join('|'); module.exports = { preset: 'ts-jest', testEnvironment: 'jsdom', testMatch: ["**/__tests__/**/*.ts?(x)", "**/?(*.)+(test).ts?(x)"], transform: { "^.+\\.(js|ts|tsx)$": "ts-jest", }, transformIgnorePatterns: [ `/node_modules/(?!${esModules})`, ], }
2. 模拟aws-rum-web模块(测试场景推荐)
测试阶段通常不需要实际运行RUM监控逻辑,直接用Jest模拟整个模块:
在测试入口文件(比如src/tests/setup.ts)或单个测试文件顶部添加:
jest.mock('aws-rum-web', () => ({ AwsRum: jest.fn().mockImplementation(() => ({ init: jest.fn(), // 按需添加你代码中用到的其他AwsRum实例方法 })), PageAttributes: jest.fn(), }));
如果使用了setupFilesAfterEnv,可以把这段模拟代码放在对应配置文件里,实现全局生效。
3. 调整转换规则,用Babel处理JS文件
如果ts-jest对纯JS的ES模块转换支持不佳,可拆分转换规则,用babel-jest处理JS文件:
首先安装必要依赖:
npm install --save-dev babel-jest @babel/preset-env
修改jest.config.js:
const esModules = ['web-vitals', 'aws-rum-web'].join('|'); module.exports = { preset: 'ts-jest', testEnvironment: 'jsdom', testMatch: ["**/__tests__/**/*.ts?(x)", "**/?(*.)+(test).ts?(x)"], transform: { "^.+\\.tsx?$": "ts-jest", "^.+\\.js$": "babel-jest", }, transformIgnorePatterns: [ `/node_modules/(?!${esModules})`, ], }
同时添加babel.config.js:
module.exports = { presets: [['@babel/preset-env', { targets: { node: 'current' } }]], };
4. 升级Jest及相关依赖
旧版本Jest对ES模块兼容性较差,尝试升级到最新稳定版:
npm install --save-dev jest@latest ts-jest@latest @types/jest@latest
内容的提问来源于stack exchange,提问作者codeedoc
相关产品推荐
相关产品推荐

