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

运行测试用例时遇SyntaxError: Unexpected token '<'问题求助

Jest测试报错求助:从模块导入错误到Unexpected token '<'

问题概述

运行测试用例时先碰到cannot import statement outside of a module错误,通过在package.json中添加以下配置解决:

"jest": {
    "transformIgnorePatterns": [
      "./node_modules/(?!(MY_LIBRARY|@stencil)/)"
    ]
  },

但解决该问题后,又出现Unexpected token '<'错误。已尝试安装jest-transform-stub、Mock SVG等方法,均未解决。当前jest.config.js配置如下:

module.exports = {
    preset: "ts-jest",
    transform: {
      "^.+\\.(ts|tsx)?$": "ts-jest",
      "^.+\\.(js|jsx)$": "babel-jest",
    },

    // 测试文件匹配规则
    testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",

    // 支持导入的文件扩展名
    moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"]
  };

可行解决方案

1. 为非代码文件添加转换器

Unexpected token '<'大多是因为Jest遇到HTML、SVG这类静态文件时没有对应的转换规则。可以修改jest.config.js,为这类文件配置jest-transform-stub:

  • 先安装依赖:
    npm install jest-transform-stub --save-dev
    
  • 更新transform配置:
    transform: {
      "^.+\\.(ts|tsx)?$": "ts-jest",
      "^.+\\.(js|jsx)$": "babel-jest",
      "^.+\\.(svg|html|css)$": "jest-transform-stub"
    },
    

2. 通过ModuleNameMapper Mock静态资源

如果转换器方案无效,直接Mock所有静态文件:

  • 在jest.config.js中添加:
    moduleNameMapper: {
      "^.+\\.(svg|png|jpg|html|css)$": "<rootDir>/__mocks__/fileMock.js"
    }
    
  • 在项目根目录创建__mocks__/fileMock.js,内容为:
    module.exports = "test-file-stub";
    

3. 检查transformIgnorePatterns与依赖包

之前的配置让MY_LIBRARY和@stencil跳过忽略转换,如果这些包内部包含HTML/SVG等文件,需要确保转换器能覆盖到它们。可以尝试调整transformIgnorePatterns的范围,或者确认依赖包的输出是否为Jest可处理的格式。

4. 验证Babel配置

如果使用babel-jest,确保Babel配置能正确处理项目语法。比如在babel.config.js中添加必要的预设:

module.exports = {
  presets: [
    "@babel/preset-env",
    "@babel/preset-react",
    "@babel/preset-typescript"
  ]
};

内容的提问来源于stack exchange,提问作者Sanjana S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:13:18