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

React TS项目Jest测试Monaco Editor遇模块语法错误求助

解决方案

1. 调整Jest配置适配ES模块

在项目根目录的jest.config.js中修改配置,让Jest正确处理monaco-editor这类ES模块:

module.exports = {
  transform: {
    '^.+\\.(ts|tsx)$': 'babel-jest',
    '^.+\\.(js|jsx)$': 'babel-jest',
  },
  // 不对monaco-editor和它依赖的部分包做转译排除
  transformIgnorePatterns: [
    '/node_modules/(?!(monaco-editor|vscode-languageserver-types)/)',
  ],
  // 指定monaco-editor的ES模块入口
  moduleNameMapper: {
    'monaco-editor': '<rootDir>/node_modules/monaco-editor/esm/vs/editor/editor.main.js',
  },
}

2. 修正Babel配置确保转译正常

在babel.config.js中配置正确的预设,保证TypeScript和ES模块能被转译为Jest支持的格式:

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

3. Mock Monaco Editor(非必要但实用)

如果你的测试不需要真实渲染编辑器功能,直接在测试文件顶部mock整个模块,避免加载真实的编辑器代码:

jest.mock('monaco-editor', () => ({
  editor: {
    create: jest.fn(() => ({
      dispose: jest.fn(),
      setValue: jest.fn(),
      getValue: jest.fn(),
    })),
  },
}));

4. 处理Web Worker的测试兼容

如果项目中用到了Web Worker,需要给Jest添加Worker的mock:
首先在jest.config.js的moduleNameMapper里添加映射:

moduleNameMapper: {
  // ...其他已有配置
  '\\.worker\\.(ts|js)$': '<rootDir>/__mocks__/workerMock.js',
}

然后在项目根目录创建__mocks__/workerMock.js文件,内容如下:

export default class Worker {
  constructor() {
    this.onmessage = jest.fn();
    this.postMessage = jest.fn();
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:12:34