当运行jest时,我该如何禁用一些babel转换?

15

我有一个用react-create-app开始但后来弃用的项目,并且我已经开始编写测试。由于我使用了最新的node,所以在进行测试时不需要运行许多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"
   }
}

我的 .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"]
      ]
    }
  }
}

稍微修改后的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);

我认为我对babelrc文件中的"env"部分的工作原理有所误解,但我认为设置BABEL_ENV变量会覆盖.babelrc中提供的默认值。我错在哪里了?


2
你是否尝试过在Jest配置中禁用默认的transform,将其设置为空对象{}?默认情况下它使用babel-jest - morganney
1个回答

1

来自transform的Jest文档:

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

因此,如果您什么都不做,Jest将默认使用babel-jest转换您的代码。

同样来自Jest关于ESM的文档,第一条目:

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

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

transform: {}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接