带有 ES6 模块的 babel-jest
Posted
技术标签:
【中文标题】带有 ES6 模块的 babel-jest【英文标题】:babel-jest with ES6 modules 【发布时间】:2018-03-20 02:13:47 【问题描述】:我很高兴使用 node 8.6 并打开了实验性 ES6 模块选项(--experimental-modules)。这让我可以完美地为 node 编写简单的 ES2015 代码,而不需要 babel。
问题是,当我尝试使用 jest 创建一些测试时,它无法抱怨语法错误:“意外的令牌导入”。
.babelrc 配置如下:
"env":
"test":
"presets": [
["env",
"targets":
"node": "8.6"
]
]
我的 jest.config.js 如下:
module.exports =
testMatch: ['/tests/**/*.js', '**/?(*.)test.js'],
抛出的错误:
/app/tests/integration/controller/data-provider/Credentials/CredentialsList.action.test.js:2
import Credentials, AdWordsCredentials from '../../../../../imports/models/data-provider/Credentials.mjs';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:305:17)
at Generator.next (<anonymous>)
at Promise (<anonymous>)
相关包:
babel-core@^6.26.0 jest@^21.2.1 babel-jest@^21.2.0 babel-preset-env@^1.6.0任何帮助将不胜感激。 谢谢:)
更新:我尝试在没有 babel 的情况下调用 jest,使用以下命令,没有任何更改:node --experimental-modules node_modules/.bin/jest
【问题讨论】:
运气好了吗? 2年后我仍然有同样的问题。 【参考方案1】:Jest 有一个 require
的自定义实现来帮助模拟。不幸的是,这使得 jest 与node --experimental-modules
不兼容。 Babel 可能是使用 ES6 模块的最佳方式。见https://github.com/facebook/jest/issues/4842
【讨论】:
【参考方案2】:我没有开玩笑,我不确定这是否会解决,但我希望这可以帮助你。
Node 仍然不支持所有语法。如果你真的在寻找一种更快的方式来开始开发,使用具有 Ecmascript2017 的所有功能的源代码,你需要一个像 @kawix/core https://www.npmjs.com/package/@kawix/core 这样的模块
README.md 怎么说,允许您使用所有功能,包括“imports”和“async/await”,还支持 typescript 和其他好的功能,所有这些都没有很多依赖项。可以直接用 cli 使用:
> npm install -g @kawix/core
> kwcore /path/to/fullsyntaxtsupport.js
或者如果你想以编程方式包含,创建一个文件示例 main.js 来导入完整的语法文件
var kawix= require("@kawix/core")
kawix.KModule.injectImport()
kawix.KModule.import("/path/to/fullsyntaxtsupport.js").catch(function(e)
console.error("Some error: ",e)
)
【讨论】:
以上是关于带有 ES6 模块的 babel-jest的主要内容,如果未能解决你的问题,请参考以下文章
带有 typescript es6 导入语法的 html-validator 模块