jestjs - 无法用 Monaco Editor 测试 Jest - 意外的标记

标签 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)

应用程序已经为 jestbabel-jest 安装了包。

Babel 配置:

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 };

最佳答案

从 monaco 延迟加载模块的文档中建议的 import 语句导致 esm 文件夹,jest 不熟悉。

import * as monaco from "monaco-editor/esm/vs/editor/editor.api.js";

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

将这些添加到 jest 配置中:

{
  "transformIgnorePatterns": [
     "node_modules\/(?!(monaco-editor)\/)"
  ]
}

PS:如果您使用的是 jest-dom , 它可能会开始提示没有实现 monaco-editor 的某些功能,你可以模拟它:

jest.mock("monaco-editor/esm/vs/editor/editor.api.js");

关于jestjs - 无法用 Monaco Editor 测试 Jest - 意外的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57731857/

相关文章:

jquery - jest.js 中的 loadFixtures 方法

javascript - 测试值是否传递给发出事件的方法,Vue

javascript - 显示 Monaco Editor 中错误的快速修复

visual-studio-code - 如何在 monaco-editor 中使用 VSC 主题?

javascript - 如何创建多个 monaco javascript 编辑器,使它们不共享全局命名空间?

reactjs - 使用react jest测试requireJS中创建的组件,抛出错误: ReferenceError: define is not defined

reactjs - 如何用 Jest 覆盖 mapDispatchToProps 中的行?

monaco-editor - Monaco Editor : Setting Font Size Using API?

javascript - 开 Jest 测试 hasClass() 方法即使为 true 也返回 false

monaco-editor - 如何将 monaco-editor 正确集成到 Angular 应用程序中?