关于带有ES6模块的ecmascript 6:babel-jest

babel-jest with ES6 modules

我很高兴在启用实验性ES6模块选项(--experimental-modules)的情况下使用节点8.6。 这使我无需babel即可完美地为节点编写普通的ES2015代码。

问题是当我尝试用玩笑创建一些测试时,它无法抱怨语法错误:"意外的令牌导入"。

.babelrc配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
 "env": {
   "test": {
     "presets": [
        ["env", {
         "targets": {
           "node":"8.6"
          }
        }]
      ]
    }
  }
}

我的jest.config.js如下:

1
2
3
module.exports = {
  testMatch: ['/tests/**/*.js', '**/?(*.)test.js'],
}

引发的错误:

1
2
3
4
5
6
7
8
9
    /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 ()
          at Promise ()

相关套餐:

  • babel-核心@ ^ 6.26.0
  • 开玩笑@ ^ 21.2.1
  • babel-jest@^21.2.0
  • babel-preset-env@^1.6.0

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

更新:我尝试使用以下命令在不使用babel的情况下调用jest,而未进行任何更改:node --experimental-modules node_modules/.bin/jest


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


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

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

README.md的用法允许您使用所有功能,包括"导入"和"异步/等待",还支持打字稿以及其他良好的功能,而没有很多依赖。 您可以直接与cli一起使用:

1
2
> npm install -g @kawix/core
> kwcore /path/to/fullsyntaxtsupport.js

或者,如果要以编程方式包含incl,请创建一个文件示例main.js来导入完整语法文件

1
2
3
4
5
var kawix= require("@kawix/core")
kawix.KModule.injectImport()
kawix.KModule.import("/path/to/fullsyntaxtsupport.js").catch(function(e){
    console.error("Some error:",e)
})