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)
文档中建议的从 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)