难以一起使用babel和jest

时间:2017-05-14 04:45:41

标签: node.js jestjs babel

我试图一起使用jest和babel。

概述

如何使用babel编译ES6文件的文件夹,在构建步骤中忽略特定文件夹(/__tests__/),并使用jest在ES6中编写我的测试?

更多详情

我的目录结构如下所示:

src
│   a.js
│   b.js
│   c.js
│
└───__tests__
    │   d.js

我希望编译src(不包括测试文件夹)并将输出放在lib中。

以下是package.json中的脚本:

"scripts": {
  "build": "babel src -d lib",
  "test": "jest --coverage"
}

.babelrc

{
  "presets": [
    "env"
  ]
}

我还安装了babel-jest,因此jest将正确运行我在ES6中编写的测试。

使用上面的配置,正常运行yarn build会构建到lib,但它还包含__tests__文件夹。 yarn test按预期工作,正确运行ES6。

我试过了:

1。

忽略__tests__中的.babelrc文件夹。

编译按预期工作,没有__tests__文件夹:

> yarn build
yarn build v0.24.4
$ babel src -d lib
src\a.js -> lib\a.js
src\b.js -> lib\b.js
src\c.js -> lib\c.js
Done in 0.82s.

但是,yarn test不再有效:

>yarn test
yarn test v0.24.4
$ jest --coverage
 FAIL  src\__tests__\toccer.js
  ● Test suite failed to run

    D:\Dev\toccer\src\__tests__\toccer.js:6
    import toccer from '../'
    ^^^^^^
    SyntaxError: Unexpected token import

      at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/ScriptTransformer.js:290:17)
      at process._tickCallback (internal/process/next_tick.js:103:7)

显然我上面使用的ignore选项也会在jest执行此操作时跳过甚至转换文件。

2

所以,我恢复了上面的更改并尝试在CLI中为构建脚本设置ignore。

"build": "babel src -d lib --ignore '/__tests__/'"

但是,测试文件夹仍然会被处理。

>yarn build
yarn build v0.24.4
$ babel src -d lib --ignore '/__tests__/'
src\cli.js -> lib\cli.js
src\index.js -> lib\index.js
src\utils.js -> lib\utils.js
src\__tests__\toccer.js -> lib\__tests__\toccer.js
Done in 0.95s.

此标志似乎与配置文件中的ignore选项有所不同。实际上,它似乎没有做任何事情。我尝试了--ignore '/src/a.js',但它仍处理该文件。我在某个地方看到旧版本中存在babel的错误,但应该在我目前正在使用的版本中修复。

版本

节点:6.10.0

babel-cli:6.24.1

babel-jest:20.0.1

jest-cli:20.0.1

1 个答案:

答案 0 :(得分:1)

我在一个正在研究atm的项目中有类似的设置。这是我使用的构建脚本,一切都工作文件。构建不构建测试文件,并且正确编译了用ES6编写的jest测试。

"dist": "babel src/ -d dist/ --ignore __tests__/*"

我认为你也可以这样做

"dist": "babel src/ -d dist/ --ignore __mocks__,__tests__"

我也使用了babel-cli:^ 6.24.1。

我认为babel根本不了解您正在使用的模式的格式。