我试图一起使用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。
我试过了:
忽略__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执行此操作时跳过甚至转换文件。
所以,我恢复了上面的更改并尝试在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
答案 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
根本不了解您正在使用的模式的格式。