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

添加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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:04:56