配置 Babel 和 Jest

nom*_*oda 6 node.js jestjs babeljs babel-jest

TLDR:我如何配置jest,以便它使用babel编译测试文件,并在需要的所有文件globalSetupglobalTeardown


我一直在努力配置jestbabel. 似乎当我运行我的测试时babel无法加载配置文件,或者它根本没有运行。

package.json 中:

{
  "scripts": {
    "start": "babel-node src/index.js",
    "test": "jest src/tests/*.test.js",
  },
  "devDependencies": {
    "@babel/cli": "^7.0.0-rc.1",
    "@babel/core": "^7.0.0-rc.1",
    "@babel/node": "^7.0.0-rc.1",
    "@babel/preset-env": "^7.0.0-rc.1",
    "babel-jest": "^23.4.2",
    "jest": "^23.5.0",
  }
}
Run Code Online (Sandbox Code Playgroud)

babel.config.js 中:

module.exports = (api) => {
    if (api) api.cache(true);
    const presets = ['@babel/preset-env'];
    const plugins = [];
    return {
        presets,
        plugins,
    };
};
Run Code Online (Sandbox Code Playgroud)

jest.config.js 中:

module.exports = {
    globalSetup: './src/config/jest/setup',
    globalTeardown: './src/config/jest/teardown',
};
Run Code Online (Sandbox Code Playgroud)

当我运行时npm run test,出现以下错误:

import app from '../../index';
^^^^^^ SyntaxError: Unexpected token import
Run Code Online (Sandbox Code Playgroud)

...我认为这意味着babel未能正确配置。我尝试登录两个配置文件,babel.config.js并且仅在我这样做时运行npm start

当我使用相同的配置时.babelrc,测试可以运行。然而globalSetupglobalTeardown不能。

Sau*_*rya 7

Jest 当前不转换globalSetup和 中定义的模块globalTeardown。有一个开放的GitHub的讨论在这里

话虽如此,在同一线程上有一些解决方法。您必须要求babel-registerbabel-polyfill在您的jest.config.js. 这是完整的实现:https : //github.com/facebook/jest/issues/5164#issuecomment-366139663

如果有人正在使用 TypeScript,则需要ts-node/register让它工作。https://github.com/facebook/jest/issues/5164#issuecomment-376006851