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

使用ts-jest运行测试遇SyntaxError: Unexpected token 'export'错误求助

解决Jest+ts-jest中ssr-window的ESM语法错误问题

问题背景

使用Jest搭配ts-jest运行测试时,触发SyntaxError: Unexpected token 'export'错误,根源是依赖库ssr-window采用ESM模块语法,但Jest默认忽略node_modules目录下的文件转换,即便配置了transformIgnorePatterns也未生效。

核心原因

  1. 现有jest.config.js的transform配置仅处理静态资源,未指定TS/JS文件的转换规则,导致ts-jest无法对ssr-window的ESM代码进行转译
  2. transformIgnorePatterns的正则匹配规则存在偏差,未能正确让ssr-window跳出转换黑名单

解决步骤

  • 补充TS/JS文件的转换规则:在transform中添加ts-jest对TS/JS文件的处理逻辑,确保白名单内的node_modules模块能被转译
  • 修正transformIgnorePatterns正则:调整正则表达式,精准排除ssr-window,避免其被Jest忽略转换
  • 可选:调整TS模块配置:若项目无需ESM输出,可将tsconfig.json的module字段改为CommonJS,减少模块兼容冲突

修改后的配置示例

jest.config.js

const { pathsToModuleNameMapper } = require("ts-jest");
const { compilerOptions } = require("./tsconfig.json");

module.exports = {
    resetMocks: false,
    preset: "ts-jest",
    testEnvironment: "jsdom",
    moduleDirectories: [
        "node_modules",
        "src"
    ],
    resolver: "./jest.resolver",
    globals: {
        google: {},
    },
    transform: {
        // 新增TS/JS文件的转译规则,让ts-jest处理这类文件
        "^.+\\.(ts|tsx|js|jsx)$": "ts-jest",
        "\\.(jpeg|png|mp4|svg|gif)$": "<rootDir>/config/jest/fileTransform.js",
    },
    setupFilesAfterEnv: [
        "<rootDir>/src/setupTests.ts",
    ],
    moduleNameMapper: {
        "\\.(css|scss)$": "identity-obj-proxy",
        ...pathsToModuleNameMapper(compilerOptions.paths, {
            prefix: '<rootDir>/src/',
        }),
    },
    transformIgnorePatterns: [
        // 修正正则,确保ssr-window不被忽略转译
        "/node_modules/(?!(ssr-window)/)",
    ]
};

可选:调整tsconfig.json的module配置

{
  "compilerOptions": {
    // ...其他原有配置
    "module": "CommonJS",
    // ...其他原有配置
  }
}

验证方式

重新执行测试命令,检查ssr-window的ESM代码是否被正确转译,确认Unexpected token 'export'错误是否消失。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:23:09