带有ES6模块的babel-jest

时间:2017-10-08 22:42:25

标签: ecmascript-6 jestjs babel es6-modules babel-jest

我很高兴使用节点8.6,并启用了实验性ES6模块选项(--experimental-modules)。这使我能够完美地为节点编写简单的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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我并没有开玩笑,我不确定这是否可以解决,但是我希望这可以为您提供帮助。

Node仍然不支持所有语法。如果您确实正在寻找一种更快的开始开发的方式,请使用具有Ecmascript2017所有功能的源代码,则需要一个@ kawix / core https://www.npmjs.com/package/@kawix/core

之类的模块。

README.md的用法说明使您可以使用所有功能,包括“导入”和“异步/等待”,还支持打字稿和其他良好功能,而无需很多依赖。您可以直接与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)
})