gpt4 book ai didi

babeljs - babel-jest 不处理模块内的 ES6

转载 作者:行者123 更新时间:2023-12-03 10:17:02 26 4
gpt4 key购买 nike

我正在尝试在使用 ES6 模块的基于 React 的项目上设置 Jest。但是我似乎遇到了 ES6 模块的问题,我正在使用 babel-jest 并相信我已经正确设置了这个(Jest 会自动检测到它)。

Jest 在使用 ES6 导入时似乎没有问题,但是一旦它在其中一个导入的模块中遇到 import 语句,它就会窒息。就好像它只是在转换初始测试脚本而不是任何导入的模块。我尝试了各种配置并尝试搜索谷歌但没有运气。在没有任何导入的情况下运行测试工作正常。

这是错误:

({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import Predications from './predications';
^^^^^^
SyntaxError: Unexpected token import

以下是配置的相关位:

jest.conf.json
{
"testRegex": "\/test\/spec\/.*\\.js$",
}

.babelrc
{
"presets": ["es2015", "stage-0", "react"]
}

测试脚本
import React from 'react';
import { mount, shallow } from 'enzyme';
import Slider from 'react-slick';
import Carousel from '../../client/components/carousel/carousel.js'; // test chokes on when I include this module

describe('carousel component', () => {
it('is a test test case', () => {
expect(1 + 2).toEqual(3);
});
});

更新:

正如建议的那样,我尝试在没有 jest.conf.js 的情况下运行测试,但是需要 testRegex 才能让 Jest 找到我的测试,我尝试将测试移动到默认测试目录,但它们仍然失败。

我想澄清一下测试本身运行良好,问题似乎是我导入的模块之一使用 ES6,在我上面的示例中,如果我不导入我的轮播组件,测试运行良好,只要我导入测试阻塞了该文件中的 import 语句。似乎导入的模块没有被转译。

更新 #2

经过一番调查,问题似乎是 babel 没有在 node_modules 中转换 ES6。我在这里创建了一个示例 repo 来演示这一点: https://github.com/jamiedust/babel-jest-example

我知道第三方模块应该处理他们自己的转译,但是我们有许多模块托管在我们自己的 npm 注册表上并在项目之间重用,在这些情况下,Webpack 处理转译,对于我们需要这些的 Jest 测试node_modules 由 Babel 转译,或者利用我们的 webpack 设置为我们执行此操作的一种方式。

解决方案

在 package.json(或 Jest 配置文件)中添加以下配置。
"jest": {
"transformIgnorePatterns": [
"/node_modules/(?!test-component).+\\.js$"
]
}

最佳答案

默认情况下,node_modules 中的任何代码被 babel-jest 忽略,请参阅 Jest 配置选项 transformIgnorePatterns .我还创建了一个 PR on your example repo ,所以你可以看到它工作。
虽然这可行,但我发现它在具有大量包含 ES 模块的依赖项的实际应用程序中非常慢。 Jest 代码库有一个稍微不同的方法,你可以在 babel-jest transforming dependencies 中找到。 .这在 Windows 上也可能需要更长的时间,请参阅 Taking 10 seconds on an empty repo .
如果进行“单元”测试,模拟可能是更好的方法。

关于babeljs - babel-jest 不处理模块内的 ES6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42226674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com