使用ES6模块的babel-jest

11

我很高兴地使用Node 8.6,并打开了实验性的ES6模块选项(--experimental-modules)。这使我能够完美地为Node编写纯ES2015代码,而不需要使用Babel。

问题在于,当我尝试使用Jest创建一些测试时,它会报错语法错误:“Unexpected token import”。

.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

任何帮助都将不胜感激。 谢谢 :)

更新:我已尝试使用以下命令调用jest而没有使用babel,但没有任何变化:node --experimental-modules node_modules/.bin/jest


1
你有没有找到解决方法?两年过去了,我还是遇到同样的问题。 - geoidesic
2个回答

4
Jest使用自定义的require实现来帮助进行模拟。不幸的是,这使得jest与node --experimental-modules不兼容。使用Babel可能是在jest中使用ES6模块的最佳方法。请参见https://github.com/facebook/jest/issues/4842

-2

我之前没有使用过jest,也不确定这个方法是否有效,但我希望能对你有所帮助。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接