jam*_*ust 26 jestjs babeljs es6-modules
我正在尝试在一个使用ES6模块的基于React的项目上设置Jest.但是我似乎遇到了ES6模块的问题,我正在使用babel-jest并相信我已正确设置(Jest会自动检测到它).
Jest似乎没有使用ES6导入的问题,但是只要它在其中一个导入模块中的导入语句上命中它就会窒息.就好像它只是转发初始测试脚本而不是任何导入的模块.我尝试了各种配置,并尝试搜索谷歌没有运气.没有任何导入的运行测试工作正常.
这是错误:
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import Predications from './predications';
^^^^^^
SyntaxError: Unexpected token import
Run Code Online (Sandbox Code Playgroud)
以下是配置的相关部分:
jest.conf.json
{
"testRegex": "\/test\/spec\/.*\\.js$",
}
Run Code Online (Sandbox Code Playgroud)
.babelrc
{
"presets": ["es2015", "stage-0", "react"]
}
Run Code Online (Sandbox Code Playgroud)
测试脚本
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);
});
});
Run Code Online (Sandbox Code Playgroud)
更新:
正如所建议的,我已经尝试在没有jest.conf.js的情况下运行测试,但是为了让Jest找到我的测试需要testRegex,我尝试将测试移动到默认测试目录,但它们仍然失败.
我想澄清测试本身运行正常,问题似乎是我导入的模块之一使用ES6,在上面的例子中,如果我不导入我的轮播组件,测试运行正常,我导入测试在该文件中的import语句上阻塞.似乎导入的模块没有被转换.
更新#2
经过一些调查后,问题似乎是babel没有在node_modules中转换ES6.我在这里创建了一个示例repo来演示这个:https://github.com/jamiedust/babel-jest-example
我知道第三方模块应该处理他们自己的转换,但是我们有许多模块,这些模块托管在我们自己的npm注册表上并在项目之间重用,在这些情况下Webpack处理转换,对于Jest测试我们需要这些由Babel编译的node_modules,或者利用我们的webpack设置为我们做这件事的方法.
解
在package.json(或Jest配置文件)中添加以下配置.
"jest": {
"transformIgnorePatterns": [
"/node_modules/(?!test-component).+\\.js$"
]
}
Run Code Online (Sandbox Code Playgroud)
小智 11
默认情况下,任何代码都node_modules被忽略babel-jest,请参阅Jest配置选项transformIgnorePatterns.我还在你的示例回购中创建了一个PR,所以你可以看到它正常工作.
虽然这有效,但我发现它在包含ES模块的许多依赖项的实际应用程序中非常慢.Jest代码库有一个稍微不同的方法,因为你可以在"babel-jest转换依赖关系"中找到 (抱歉,不会让我发布超过2个URL).这在Windows上也可能需要更长的时间,请参阅"在空回购上花费10秒钟".
如果进行"单元"测试,模拟可能是更好的方法.
| 归档时间: |
|
| 查看次数: |
12341 次 |
| 最近记录: |