配置 Babel 和 Jest

7
TLDR: 我如何配置jest以便使用babel编译测试文件和globalSetup和globalTeardown中所需的文件?
我一直在努力配置jest和babel,但是当我运行我的测试时,似乎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",
  }
}

babel.config.js文件中:

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

in jest.config.js:

module.exports = {
    globalSetup: './src/config/jest/setup',
    globalTeardown: './src/config/jest/teardown',
};

当我运行npm run test时,我收到了以下错误信息:
import app from '../../index';
^^^^^^ SyntaxError: Unexpected token import

我猜这意味着 babel 没有正确配置。我尝试在两个配置文件上记录日志,只有当我执行 npm start 时才会运行 babel.config.js

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


当我运行 npm start 时,我使用 babel-node 进行一些神奇的编译。我想在进行 Jest 测试时也使用 babel-node,是吗? - nomadoda
可能是如何在Jest中使用babel-preset-env的重复问题。 - Andrea Carraro
1个回答

8

Jest目前不能转换在globalSetupglobalTeardown中定义的模块。这里有一个开放的GitHub讨论here

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

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


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