Jest、env preset 和 stage-0 特性

Jest, env preset and stage-0 features

我正在尝试配置 jest,但面对它无法处理 es6 功能的事实。

为了解决这个问题,我已将配置添加到 package.json:

"jest": {
    "transform": {
      "^.+\.jsx?$": "./node_modules/babel-jest"
    },
}

我的 .babelrc 配置:

{
  "presets": [
    "react",
    "es2017",
    "stage-0",
    ["env", {
      "targets": {
        "browsers": ["last 2 versions"]
      },
      "spec": true,
      "modules": false,
      "debug": true
    }],
  ],
  "plugins": [
    ["transform-class-properties", { "spec": true }]
  ]
}

它看起来很适合我,但开玩笑无论如何都无法 运行 Test suite failed to run import React from 'react';

中的道具
class App extends Component {
   static propTypes = {}
}

目前我不知道出了什么问题,但看起来 stage-x 功能不仅在环境预设中不可用,而且 plugins 和其他预设都被忽略了。 但是 webpack 构建 bundle 没有任何错误。 所以看起来这是个笑话问题。

可以帮我看看是怎么回事吗?

========== 固定配置 .babelrc:

{
  "presets": [
    "react",
    "es2015",
    "es2016",
    "es2017",
    "stage-0",
    ["env", {
      "targets": {
        "browsers": ["last 2 versions"]
      },
      "spec": true,
      "modules": false,
      "debug": true
    }],
  ],
  "plugins": [
    ["transform-class-properties", { "spec": true }]
  ]
}

package.json:

  "jest": {
    "moduleNameMapper": {
      "config.env": "<rootDir>/config/application.production.js",
      "^.+\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga|po)$": "<rootDir>/__mocks__/fileMock.js",
      "^.+\.(css|less)$": "<rootDir>/__mocks__/styleMock.js"
    },
    "moduleFileExtensions": [
      "js",
      "jsx",
      "js",
      "json"
    ]
  },

es2017 预设不包括 es2016es2015。 您可以显式地包含所有这些,也可以改用 preset-env

此外,您不必在 jest 配置中显式设置 transform 属性。

from Jest documentation:

Note: babel-jest is automatically installed when installing Jest and will automatically transform files if a babel configuration exists in your project.