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