【问题标题】:Cannot test jest with monaco editor - unexpected token无法使用 monaco 编辑器测试玩笑 - 意外标记
【发布时间】:2020-01-04 00:14:39
【问题描述】:

在应用程序上运行 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 };

【问题讨论】:

    标签: jestjs monaco-editor


    【解决方案1】:

    在那个问题上帮助我的唯一解决方法(来自here):

    在文件夹__mocks__ 创建文件react-monaco-editor.js,内容为:

    import * as React from 'react';
    
    export default function MonacoEditor() {
      return <div />;
    }
    

    【讨论】:

    • 我尝试了多种有关 transformIgnorePatterns 和 moduleNameMapper 的解决方案,但唯一对我有用的是模拟 Monaco。
    【解决方案2】:

    我对 Jest 和 Monaco 有同样的问题,为了使测试通过,我必须:

    1. 为 monaco-editor 添加一个 moduleNameMapper:#133 (comment)
    2. 配置 setupTests.js,如下所述:stackOverflow

    我正在使用:

    • “笑话”:“^24.9.0”
    • "babel-jest": "24.9",
    • “摩纳哥编辑”:“^0.20.0”
    • “react-monaco-editor”:“0.33.0”,
    • “monaco-editor-webpack-plugin”:“^1.8.2”,

    【讨论】:

      【解决方案3】:

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

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

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

      将这些添加到笑话配置中:

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

      PS:如果您使用的是jest-dom,它可能会开始抱怨没有实现monaco-editor 的某些功能,您可以使用以下方式模拟它:

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

      【讨论】:

        猜你喜欢
        • 2019-11-19
        • 2018-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-31
        • 2017-06-03
        • 1970-01-01
        相关资源
        最近更新 更多