node.js - 很难同时使用 babel 和 jest

标签 node.js jestjs babeljs

我正在尝试同时使用 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.

忽略.babelrc中的__tests__文件夹。

编译按预期工作,没有 __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 测试不再有效:

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

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


2.

因此,我恢复了上面的更改,并尝试在 CLI 中为构建脚本设置忽略。

"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 '/src/a.js',它仍然处理该文件。我在某个地方看到旧版本中的 babel 有一个错误,但应该在我当前使用的版本中修复。

版本

Node :6.10.0

babel-cli:6.24.1

通天 Jest :20.0.1

jest-cli:20.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 根本不理解您正在使用的模式的格式。

关于node.js - 很难同时使用 babel 和 jest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43960467/

相关文章:

node.js - 从多个表中 Sequelize 销毁

javascript - 单元测试导出的模块功能

javascript - React 中 setState 处理程序的问题

vue.js - CssSyntaxError 使用 Webpack 4 构建未知单词

reactjs - 使用 WebPack/Babel 在生产 React JS 中删除 console.log

arrays - Node.js 中的数组长度

javascript - 连接mongodb到 Node 报错

javascript - PKCS#12 (.pfx .p12) 使用 node.js 生成?

javascript - 访问函数执行的属性(如 doSomething().cool)

javascript - 如何在测试中手动设置变量的值( Jest )?