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

Angular项目Jest单元测试遇@protontech/jsmimeparser语法错误

解决Angular Jest测试中@protontech/jsmimeparser的ES模块语法错误

问题原因

Jest默认忽略node_modules目录下包的转译操作,而@protontech/jsmimeparser@3.0.1使用了ES模块语法(如export语句),导致Jest无法识别,抛出"意外令牌'export'"的错误。

解决方案

方案1:修改Jest配置,强制转译目标库

调整Jest配置,让它不对@protontech/jsmimeparser跳过转译:

方式A:在jest.config.js中配置

module.exports = {
  // 其他已有配置...
  transformIgnorePatterns: [
    // 负向预查规则:除@protontech/jsmimeparser外,其余node_modules包跳过转译
    'node_modules/(?!@protontech/jsmimeparser)'
  ]
};

方式B:在angular.json中配置

如果项目通过angular.json管理Jest配置,找到对应项目的测试节点:

{
  "projects": {
    "your-project-name": {
      "architect": {
        "test": {
          "options": {
            "jest": {
              "transformIgnorePatterns": ["node_modules/(?!@protontech/jsmimeparser)"]
            }
          }
        }
      }
    }
  }
}

配置生效后,Jest会用ts-jest或Babel转译该库的ES模块代码,解决语法识别问题。

方案2:模拟模块(无需真实解析逻辑时使用)

如果单元测试不需要验证邮件解析的真实逻辑,仅需让测试套件正常运行,可直接模拟库的导出方法:

在组件的.spec.ts测试文件顶部添加模拟代码:

jest.mock('@protontech/jsmimeparser', () => ({
  parseMail: jest.fn(() => ({
    // 根据业务需求返回模拟的解析结果
    subject: '模拟邮件主题',
    body: '模拟邮件内容'
  }))
}));

这种方式会跳过真实库的加载,彻底规避ES模块语法冲突。

方案3:确认导入语法正确性

确保组件中对该库的导入符合ES模块规范:

import { parseMail } from '@protontech/jsmimeparser';

避免使用CommonJS的require语法,保证项目模块解析规则与库的导出方式匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:56:00