跳转到主要内容
版本:26.倍

故障排除

哦,出什么问题了?使用本指南解决Jest问题。

测试失败,而你不知道原因#

尝试使用Node内建的调试支持。注意:这只在Node.js 8+中有效。

放置一个调试器;语句,然后在项目的目录中运行:

节点——inspect-brk node_modules /。bin /笑话——runInBand ( 还有其他的论点吗 ]
或在Windows上
——inspect-brk ./node_modules/jest/bin/jest.js——runInBand ./node_modules/jest .js ( 还有其他的论点吗 ]

这将在外部调试器可以连接到的节点进程中运行Jest。请注意,该进程将暂停,直到调试器连接到它为止。

要调试谷歌Chrome(或任何基于chromium的浏览器),打开你的浏览器并转到chrome: / /检查然后点击“Open Dedicated DevTools for Node”,它会给你一个可以连接到的可用节点实例列表。点击终端上显示的地址(通常是这样的localhost: 9229)运行上述命令后,您将能够使用Chrome的DevTools调试Jest。

将显示Chrome开发者工具,并在Jest CLI脚本的第一行设置断点(这样做是为了给你时间打开开发者工具,并防止Jest在你有时间之前执行)。点击屏幕右上角的“播放”按钮继续执行。当Jest执行包含调试器语句时,执行将暂停,您可以检查当前作用域和调用堆栈。

注意:——runInBandcli选项确保Jest在同一个进程中运行测试,而不是为单个测试生成进程。Jest通常会在多个进程之间并行运行测试,但是很难同时调试多个进程。

在VS Code中调试#

有多种方法可以调试Jest测试Visual Studio代码的内置的调试器

要附加内置调试器,请按上述方式运行测试:

节点——inspect-brk node_modules /。bin /笑话——runInBand ( 还有其他的论点吗 ]
或在Windows上
——inspect-brk ./node_modules/jest/bin/jest.js——runInBand ./node_modules/jest .js ( 还有其他的论点吗 ]

然后使用下面的方法附加VS Code的调试器launch.json配置:

{
“版本” : “0.2.0” ,
“配置” : (
{
“类型” : “节点” ,
“请求” : “附加” ,
“名称” : “附加” ,
“端口” : 9229
}
]
}

要自动启动并附加到运行测试的进程,请使用以下配置:

{
“版本” : “0.2.0” ,
“配置” : (
{
“名称” : “调试Jest测试” ,
“类型” : “节点” ,
“请求” : “启动” ,
“runtimeArgs” : (
”——inspect-brk” ,
" $ {workspaceRoot} / node_modules。bin /开玩笑” ,
”——runInBand”
] ,
“控制台” : “integratedTerminal” ,
“internalConsoleOptions” : “neverOpen” ,
“端口” : 9229
}
]
}

Windows操作系统:

{
“版本” : “0.2.0” ,
“配置” : (
{
“名称” : “调试Jest测试” ,
“类型” : “节点” ,
“请求” : “启动” ,
“runtimeArgs” : (
”——inspect-brk” ,
" $ {workspaceRoot} / node_modules /开玩笑/ bin / jest.js” ,
”——runInBand”
] ,
“控制台” : “integratedTerminal” ,
“internalConsoleOptions” : “neverOpen” ,
“端口” : 9229
}
]
}

如果你正在使用Facebookcreate-react-app,您可以使用以下配置调试Jest测试:

{
“版本” : “0.2.0” ,
“配置” : (
{
“名称” : “调试CRA测试” ,
“类型” : “节点” ,
“请求” : “启动” ,
“runtimeExecutable” : " $ {workspaceRoot} / node_modules。bin / react-scripts” ,
“参数” : ( “测试” , ”——runInBand” , ”——no - cache” , ”- - - env = jsdom” ] ,
“鹿” : " $ {workspaceRoot} " ,
“协议” : “检查员” ,
“控制台” : “integratedTerminal” ,
“internalConsoleOptions” : “neverOpen”
}
]
}

可以找到更多关于节点调试的信息在这里

在WebStorm调试#

调试Jest测试的最简单方法WebStorm正在使用Jest运行/调试配置。它将启动测试并自动附加调试器。

在WebStorm菜单中运行选择编辑配置…。然后单击+并选择开玩笑。可选地指定Jest配置文件、附加选项和环境变量。保存配置,将断点放在代码中,然后单击绿色的debug图标开始调试。

如果你正在使用Facebookcreate-react-app,在Jest运行/调试配置中指定路径react-scripts在Jest包字段中添加包并添加——env = jsdom到Jest选项字段。

缓存的问题#

转换脚本被更改了,或者Babel被更新了,但是Jest不能识别这些更改?

重试,——no - cache。Jest缓存已转换的模块文件,以加速测试执行。如果您正在使用自己的自定义转换器,请考虑添加一个getCacheKey功能:getCacheKey在继电器

未解决的承诺#

如果promise根本没有解决,则可能抛出此错误:

-错误:超时-异步回调没有在内部调用 超时 规定jasmine.DEFAULT_TIMEOUT_INTERVAL.”

最常见的原因是Promise实现的冲突。例如,考虑用您自己的promise实现替换全局promise实现全球。= jest.requireActual承诺(承诺);和/或将使用的Promise库合并为一个库。

如果您的测试是长时间运行的,您可能需要考虑通过调用来增加超时jest.setTimeout

开玩笑 setTimeout ( 10000 ) ; // 10秒超时

守望的问题#

试着运行Jest with——no-watchman或设置守望配置选项

也看到守望的故障排除

在Docker和/或持续集成(CI)服务器上的测试非常慢。#

虽然Jest大多数时候在现代多核计算机和快速ssd上都非常快,但对于我们的用户来说,它在某些设置上可能会很慢发现

基于发现,缓解此问题并将速度提高50%的一种方法是顺序运行测试。

为此,您可以在同一个线程中使用——runInBand:

#使用Jest CLI
笑话——runInBand
#使用yarn测试(例如使用create-react-app)
测试 ——runInBand

加快持续集成服务器(如Travis-CI)上测试执行时间的另一种方法是将最大工作者池设置为~4。特别是在Travis-CI上,这可以将测试执行时间减少一半。注:特拉维斯CI免费的开放源码项目可用的plan只包含2个CPU核。

#使用Jest CLI
笑话——maxWorkers = 4
#使用yarn测试(例如使用create-react-app)
测试 ——maxWorkers = 4

coveragePathIgnorePatterns似乎没有任何效果。#

确保你没有使用babel-plugin-istanbul插件。Jest包裹了伊斯坦布尔,因此也告诉了伊斯坦布尔什么文件可以用覆盖收集工具。当使用babel-plugin-istanbul, Babel处理的每个文件都有覆盖集合代码,因此它不会被忽略coveragePathIgnorePatterns

定义测试#

为了能够收集测试,Jest必须同步地定义测试。

作为一个例子来说明为什么会这样,假设我们这样写一个测试:

//不要这样做——它不会工作
setTimeout ( ( ) = > {
( “通过” , ( ) = > 预计 ( 1 ) 托比 ( 1 ) ) ;
} , 0 ) ;

当Jest运行您的测试来收集测试因为我们已经将定义设置为在事件循环的下一个周期异步发生。

注意:这意味着当你使用的时候test.each不能在一个beforeEach/beforeAll

还未解决的吗?#

看到亚搏取款

最后一次更新在通过Sebastien Lorber