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
相关产品推荐
相关产品推荐

