如何在运行jest时禁用一些babel变换?

Ric*_*ard 7 javascript node.js jestjs babeljs

我有一个项目,我开始,然后弹出,与react-create-app,我开始编写测试.由于我使用的是最新节点,因此我不需要运行许多测试的babel变换.(这有利于简化回溯).但是,我无法弄清楚如何在运行测试时阻止babel转换我的代码.

在我的package.json我有

{
   "scripts": {
      "test": "BABEL_ENV=test node --harmony scripts/test.js --env=jsdom"
   },
   "jest": {
        "moduleFileExtensions": [
      "jsx",
      "js",
      "json"
    ],
    "moduleNameMapper": {
      "^.+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/config/jest/FileStub.js",
      "^.+\\.css$": "<rootDir>/config/jest/CSSStub.js"
    },
    "setupFiles": [
      "<rootDir>/config/polyfills.js"
    ],
    "testPathIgnorePatterns": [
      "<rootDir>/(build|docs|node_modules|scripts)/"
    ],
    "testEnvironment": "node"
   }
}
Run Code Online (Sandbox Code Playgroud)

我的.babelrc文件如下所示:

{
  "presets": [
    ["es2015", { "modules": false }],
    "react-app"
  ],
  "plugins": [
    ["transform-class-properties", { "spec": true }],
    ["transform-flow-strip-types"]
  ],
  "env": {
    "test": {
      "presets": [
        "node7",
        "react-app"
      ],
      "plugins": [
        ["transform-class-properties", { "spec": true }],
        ["transform-flow-strip-types"]
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

略微修改的test.js文件是:

process.env.NODE_ENV = 'test';
process.env.BABEL_ENV = 'test';
process.env.PUBLIC_URL = '';

require('dotenv').config({ silent: true });

const jest = require('jest');
const argv = process.argv.slice(2);

if (!process.env.CI) {
    argv.push('--watch');
}

jest.run(argv);
Run Code Online (Sandbox Code Playgroud)

我认为我误解了babelrc的"env"部分是如何工作的,但我认为设置BABEL_ENV变量会覆盖.babelrc中提供的默认值.我错过了什么?

mor*_*ney 1

来自 Jest 文档transform

默认:{"\\.[jt]sx?$": "babel-jest"}

因此,如果您什么都不做,Jest 将babel-jest 默认使用.

同样来自Jest 关于 ESM 的文档,项目符号 #1:

确保您通过传递transform: {}或以其他方式配置转换器以发出 ESM 而不是默认的 CommonJS (CJS) 来禁用代码转换。

因此,您可以通过将 Jest 配置设置为transform空对象来禁用代码转换:

transform: {}
Run Code Online (Sandbox Code Playgroud)