NodeJS 如何在运行jest时禁用一些巴别塔转换?

vbopmzt1  于 2022-12-26  发布在  Node.js
关注(0)|答案(1)|浏览(139)

我有一个项目,我用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"
   }
}

我的.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中提供的默认值。

hmtdttj4

hmtdttj41#

要在运行jest时禁用某些babel转换,您可以在.babelrc文件的“env”部分指定转换。在您的情况下,您可以按如下方式更新.babelrc文件:

{
   "presets":[
      [
         "es2015",
         {
            "modules":false
         }
      ],
      "react-app"
   ],
   "plugins":[
      [
         "transform-class-properties",
         {
            "spec":true
         }
      ],
      [
         "transform-flow-strip-types"
      ]
   ],
   "env":{
      "test":{
         "presets":[
            "node7",
            "react-app"
         ],
         "plugins":[
            // Add the transforms you want to disable here
           // For example:
           // ["transform-class-properties", { "spec": false }],
           // ["transform-flow-strip-types", { "enabled": false }]
         ]
      }
   }
}

然后,在package.json中,确保在运行测试时将BABEL_ENV变量设置为“test”:

{
"scripts": {
"test": "BABEL_ENV=test node --harmony scripts/test.js --env=jsdom"
},
...
}

这应该会在运行jest时禁用指定的babel转换。

相关问题