- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我添加了type: module
,但这没有帮助。
我正在尝试运行对源文件使用 import
和 export
的 mocha 或 jest 测试。
有关此问题的现有问题的具体情况与我的不同,我还发现对于具有我的具体情况的人来说,这些问题令人困惑,特别是因为我已经制定了一个具体的答案,其中的详细信息与现有问题无关,但与其他人和我的情况一样。
最佳答案
过去,如果不使用 Babel 转译代码,则无法在 Node 中使用 ES 模块(即 import
/export
)。然而,Node 中对 ES 模块的支持现已成为现实,Jest 和 Mocha 最近也添加了对原生使用 ES 模块的支持。
然而,这不仅仅需要将 "type": "module"
添加到您的 package.json 中。
如前所述,将 "type": "module"
添加到您的 package.json
将 jest-environment-node
或 jest-environment-jsdom-sixteen
安装到您的开发依赖项中。例如:
$ npm i -D jest-environment-node
更新 package.json 中的 Jest 配置并添加 testEnvironment
设置。例如:
"jest": {
"testEnvironment": "jest-environment-jsdom-node"
}
如果您使用的 Node 版本早于 13.2,则在运行 Node 时需要添加两个附加标志:--experimental-modules
和 experimental-vm -模块
。我使用 npx
来执行命令,尽管它有点冗长:
$ npx --node-arg=--experimental-modules --node-arg=--experimental-vm-modules jest
这将使用适当的节点标志运行所有 Jest 测试。如果您愿意的话,我建议您将其作为 package.json
中的 test
脚本。
现在您应该能够在没有 Babel 的情况下使用 import
/export
了!
最后一点很重要:在 Node 中使用原生 ES 模块时,您必须使用本地模块的整个导入路径,包括文件扩展名。例如:
import lib from "./my/lib.js"
这里是关于原生 ES 模块的 Node 文档,如果您想更详细地了解这一点:https://nodejs.org/dist/latest-v14.x/docs/api/esm.html
我还建议阅读此 Github 问题,了解有关 native ES 模块的 Jest 实现的更多详细信息:https://github.com/facebook/jest/issues/9430
关于javascript - 运行 js 测试 - 获取 "Cannot use import statement outside of a module",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61575545/
我是一名优秀的程序员,十分优秀!