使用 Jest 导入意外令牌(babel-eslint 无法从测试文件、symlink env 获得)
Unexpected token import with Jest (babel-eslint not available from tested file, symlink env)
我在将单元测试集成到项目的特定文件夹中时遇到问题。
我的架构如下:
|_ shared
|_ job-board
|_ admin-panel
job_board 和 admin-panel 每个都包含一个 symlink 指向共享,位于./client/src/shared
,每个都包含一个安装了 babel-eslint 的 node_modules
文件夹。 shared 不包含 node_modules 文件夹,并且依赖于其他 2 个文件夹的 node_modules.
有了这个架构,我已经成功地配置了我正在使用的所有工具(Webpack、eslint、eslint-loader,...但是 Jest)。
问题是,当我在 job_board/*
或 admin_panel/*
中创建一个 *.test.js 文件时,babel-jest 被正确应用到这个文件上,但是当我创建这个文件时在 shared/*
中,没有应用 babel-jest(因为 babel-jest 在 shared
中不可用),如下错误证明:
FAIL ..\shared\utils\tests\StringUtils.test.js
● Test suite failed to run
SyntaxError: Unexpected token import
这是我的 jest-config.json 文件:
{
"moduleFileExtensions": [
"js"
],
"moduleNameMapper": {
"\.(css|scss)$": "identity-obj-proxy"
},
"modulePaths": [
"<rootDir>/client"
],
"testPathDirs": [
"<rootDir>",
"<rootDir>/../shared"
],
"testRegex": "(\.|/)test\.jsx?$"
}
(请注意,我必须将 "<rootDir>/../shared"
添加到 testPathDirs
以便可以找到 *.test.js 个文件)
还有我的 .babelrc 文件:
{
"plugins": [
"transform-decorators-legacy",
"transform-object-rest-spread"
],
"presets": [
["es2015", { "modules": false }],
"react",
"stage-0"
],
"env": {
"development": {
"presets": [
"react-hmre"
]
},
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
最后,我 运行 我的测试是:node --harmony_proxies node_modules/jest-cli/bin/jest.js --config ./jest-config.json
我是不是遗漏了什么,或者这真的是缺少能够为 babel-eslint 或其他东西提供 "root" 的功能吗?
我也在 Jest 回购上开了一个问题,但它已经关闭了。所以我来了!
上面粘贴的 Jest 配置。
jest-cli: 18.1.0
节点:5.6.0
npm: 3.6.0
OS: Windows 10
看起来您遇到了与 类似的问题。
您是否在 .babelrc 文件中尝试过以下内容?
"env": {
"start": {
"presets": [
"react-hmre"
]
},
"test": {
"presets": ["es2015", "react", "stage-0"],
"plugins": ["transform-es2015-modules-commonjs"]
}
}
对于那些对解决方法感兴趣的人,我在查看 babel-jest 的源文件时想出了一个解决方案。只需在你的 repos 的公共根目录下创建一个 .babelrc,扩展真实的。所以就我而言:
{
"extends": "./admin-panel/.babelrc"
}
我在将单元测试集成到项目的特定文件夹中时遇到问题。
我的架构如下:
|_ shared
|_ job-board
|_ admin-panel
job_board 和 admin-panel 每个都包含一个 symlink 指向共享,位于./client/src/shared
,每个都包含一个安装了 babel-eslint 的 node_modules
文件夹。 shared 不包含 node_modules 文件夹,并且依赖于其他 2 个文件夹的 node_modules.
有了这个架构,我已经成功地配置了我正在使用的所有工具(Webpack、eslint、eslint-loader,...但是 Jest)。
问题是,当我在 job_board/*
或 admin_panel/*
中创建一个 *.test.js 文件时,babel-jest 被正确应用到这个文件上,但是当我创建这个文件时在 shared/*
中,没有应用 babel-jest(因为 babel-jest 在 shared
中不可用),如下错误证明:
FAIL ..\shared\utils\tests\StringUtils.test.js
● Test suite failed to run
SyntaxError: Unexpected token import
这是我的 jest-config.json 文件:
{
"moduleFileExtensions": [
"js"
],
"moduleNameMapper": {
"\.(css|scss)$": "identity-obj-proxy"
},
"modulePaths": [
"<rootDir>/client"
],
"testPathDirs": [
"<rootDir>",
"<rootDir>/../shared"
],
"testRegex": "(\.|/)test\.jsx?$"
}
(请注意,我必须将 "<rootDir>/../shared"
添加到 testPathDirs
以便可以找到 *.test.js 个文件)
还有我的 .babelrc 文件:
{
"plugins": [
"transform-decorators-legacy",
"transform-object-rest-spread"
],
"presets": [
["es2015", { "modules": false }],
"react",
"stage-0"
],
"env": {
"development": {
"presets": [
"react-hmre"
]
},
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
最后,我 运行 我的测试是:node --harmony_proxies node_modules/jest-cli/bin/jest.js --config ./jest-config.json
我是不是遗漏了什么,或者这真的是缺少能够为 babel-eslint 或其他东西提供 "root" 的功能吗?
我也在 Jest 回购上开了一个问题,但它已经关闭了。所以我来了!
上面粘贴的 Jest 配置。
jest-cli: 18.1.0
节点:5.6.0
npm: 3.6.0
OS: Windows 10
看起来您遇到了与
您是否在 .babelrc 文件中尝试过以下内容?
"env": {
"start": {
"presets": [
"react-hmre"
]
},
"test": {
"presets": ["es2015", "react", "stage-0"],
"plugins": ["transform-es2015-modules-commonjs"]
}
}
对于那些对解决方法感兴趣的人,我在查看 babel-jest 的源文件时想出了一个解决方案。只需在你的 repos 的公共根目录下创建一个 .babelrc,扩展真实的。所以就我而言:
{
"extends": "./admin-panel/.babelrc"
}