无法使用摩纳哥编辑器测试玩笑 - 意外令牌

Agn*_*ney 3 jestjs monaco-editor

在应用程序上运行 jest 失败:

Details:

/home/**/node_modules/monaco-editor/esm/vs/editor/editor.api.js:5
import { EDITOR_DEFAULTS } from './common/config/editorOptions.js';
       ^

SyntaxError: Unexpected token {

> 1 | import * as monaco from "monaco-editor/esm/vs/editor/editor.api.js";
    | ^
  2 | 
  3 | /**
  4 |  * Get create function for the editor.

  at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:537:17)
  at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:579:25)
  at Object.<anonymous> (src/utils/editor-actions.js:1:1)
Run Code Online (Sandbox Code Playgroud)

应用程序已为jest和安装了软件包babel-jest

巴别配置:

const presets = [
  [
    "@babel/env",
    {
      targets: {
        edge: "17",
        firefox: "60",
        chrome: "67",
        safari: "11.1"
      },
      useBuiltIns: "usage",
      corejs: 3,
    }
  ],
  "@babel/preset-react"
];

const plugins = [
  "@babel/plugin-proposal-object-rest-spread",
  "@babel/plugin-proposal-class-properties",
  "babel-plugin-styled-components"
];

module.exports = { presets, plugins };
Run Code Online (Sandbox Code Playgroud)

Agn*_*ney 5

文档中建议的从 monaco 延迟加载模块的 import 语句会导致 esm 文件夹,这是开玩笑不熟悉的。

import * as monaco from "monaco-editor/esm/vs/editor/editor.api.js";
Run Code Online (Sandbox Code Playgroud)

默认情况下,babel-jest不会转换node_modules,因此任何引用 的内容monaco-editor都会出错。一个可能的解决方案是将monaco-editor包包含到编译步骤中,transformIgnorePatterns文档中所述

将这些添加到 jest 配置中:

{
  "transformIgnorePatterns": [
     "node_modules\/(?!(monaco-editor)\/)"
  ]
}
Run Code Online (Sandbox Code Playgroud)

PS:如果您正在使用jest-dom,它可能会开始抱怨没有从 实现某些功能monaco-editor,您可以模拟它:

jest.mock("monaco-editor/esm/vs/editor/editor.api.js");
Run Code Online (Sandbox Code Playgroud)