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

Angular15+Jest29环境下ESM模块(如CKEditor)测试报错求助

解决方案:Angular 15 + Nx + Jest 29 兼容 ESM 模块测试

针对升级后ESM模块(CKEditor、ngxcharts等)测试报错的问题,按以下步骤调整配置:

1. 修正 jest.config.ts 配置

Jest 29对transform规则匹配顺序和ignore逻辑做了调整,需修改如下:

export default {
  extensionsToTreatAsEsm: ['.ts', '.mjs', '.js'], // 新增ESM类型文件标记
  displayName: 'rich-text',
  setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
  coverageDirectory: '../../coverage/apps/rich-text',
  transform: {
    // 优先用babel-jest转译CKEditor和lodash-es相关文件
    'node_modules/(lodash-es|@ckeditor)/.+\\.(js|mjs)$': 'babel-jest',
    // 其余文件用jest-preset-angular处理
    '^.+\\.(ts|mjs|js|html|svg)$': 'jest-preset-angular',
  },
  transformIgnorePatterns: [
    // 只忽略未被transform匹配的node_modules文件
    '/node_modules/(?!(lodash-es|@ckeditor)/)',
    '\\.pnp\\.[^\\/]+$'
  ],
  moduleNameMapper: {
    // 解决lodash-es的ESM导入问题
    '^lodash-es$': 'lodash',
  },
  snapshotSerializers: [
    'jest-preset-angular/build/serializers/no-ng-attributes',
    'jest-preset-angular/build/serializers/ng-snapshot',
    'jest-preset-angular/build/serializers/html-comment',
  ],
  // 启用ESM实验支持
  testEnvironmentOptions: {
    customExportConditions: ['node', 'node-addons'],
  },
};

关键调整点:

  • transform顺序:将babel-jest规则前置,确保CKEditor和lodash-es文件优先被转译
  • transformIgnorePatterns:简化规则,只排除未被transform匹配的node_modules文件
  • moduleNameMapper:将lodash-es映射为CommonJS版本,避免ESM导入报错
  • testEnvironmentOptions:添加自定义导出条件,适配Node.js的ESM解析逻辑

2. 更新 babel.config.js

确保Babel能正确转译ESM到CommonJS:

module.exports = {
  presets: [
    ['@babel/preset-env', { targets: { node: 'current' } }]
  ],
  plugins: [
    '@babel/plugin-transform-modules-commonjs' // 解决CommonJS与ESM互操作问题
  ]
};

3. 正确执行测试命令

Nx测试命令需正确传递NODE_OPTIONS,格式如下:

NODE_OPTIONS="--experimental-vm-modules" nx test rich-text

注意:NODE_OPTIONS要放在nx命令前,确保Node进程能正确读取参数。

4. 依赖验证

确认jest-preset-angular版本与Angular 15兼容(当前13.0.0符合要求),babel-jest版本与Jest 29对齐(当前29.5.0符合要求)。若问题仍存在,删除node_modules和锁文件后重新安装依赖再测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:18:09