使用 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_boardadmin-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"
}