跳到主要内容
版本:25.x.

故障排除

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

测试失败,你不知道为什么

尝试使用内置的调试支持。注意:这将仅在Node.js 8+中使用。

放置A.调试器;在任何测试中的语句,然后在项目的目录中运行:

节点 - inspect-brk node_modules / .bin / jest --runinband [ 这里的任何其他论点 ]
或在Windows上
node --inspect-brk ./node_modules/jest/bin/jest.js --RuninBand [ 这里的任何其他论点 ]

这将在外部调试器可以连接到的节点进程中运行jest。请注意,此过程将暂停,直到调试器已连接到它。

在Google Chrome(或任何基于铬的浏览器)中调试,打开浏览器并转到Chrome://检查然后单击“为节点打开专用DevTools”,这将为您提供可以连接的可用节点实例列表。单击终端中显示的地址(通常是类似的localhost:9229)运行上述命令后,您将能够使用Chrome的DevTools调试Jest。

将显示Chrome开发人员工具,并且将在JEST CLI脚本的第一行设置断点(这是为您提供时间打开开发人员工具并防止在您有时间之前执行的时间)。。单击屏幕右上角的“播放”按钮的按钮以继续执行。当Jest执行包含的测试时调试器声明,执行将暂停,您可以检查当前的范围和调用堆栈。

注意:- runinband.CLI选项确保Jest在相同的过程中运行测试而不是单个测试的产卵过程。通常,Jest并行化测试跨处理运行,但很难同时调试许多进程。

调试VS代码

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

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

节点 - inspect-brk node_modules / .bin / jest --runinband [ 这里的任何其他论点 ]
或在Windows上
node --inspect-brk ./node_modules/jest/bin/jest.js --RuninBand [ 这里的任何其他论点 ]

然后使用以下附加VS代码的调试器启动.JSON.配置:

{
“版本” “0.2.0”
“配置” [
{
“类型” “节点”
“要求” “附”
“名称” “附”
“港口” 9229.
}
]
}

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

{
“版本” “0.2.0”
“配置” [
{
“名称” “调试exest tests”
“类型” “节点”
“要求” “发射”
“runtimeargs” [
“ - inspect-brk”
“$ {workspaceroot} /node_modules/.bin/jest”
“ - runinband”
]
“安慰” “SideveTerminal”
“internalconsoleoptions” “nelepen”
“港口” 9229.
}
]
}

或以下适用于Windows:

{
“版本” “0.2.0”
“配置” [
{
“名称” “调试exest tests”
“类型” “节点”
“要求” “发射”
“runtimeargs” [
“ - inspect-brk”
“$ {workspaceroot} /node_modules/jest/bin/jest.js”
“ - runinband”
]
“安慰” “SideveTerminal”
“internalconsoleoptions” “nelepen”
“港口” 9229.
}
]
}

如果您使用的是使用Facebook的Create-React-App,您可以使用以下配置调试您的JEST测试:

{
“版本” “0.2.0”
“配置” [
{
“名称” “调试CRA测试”
“类型” “节点”
“要求” “发射”
“runtimeexecutable” “$ {workspaceroot} /node_modules/.bin/reacect-scripts”
“args” [ “测试” “ - runinband” “--no-cache” “--env = jsdom” ]
“CWD” “$ {workspaceroot}”
“协议” “检查员”
“安慰” “SideveTerminal”
“internalconsoleoptions” “nelepen”
}
]
}

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

在WebStorm中调试

调试Jest测试中最简单的方法WebStorm.是使用Jest运行/调试配置。它将启动测试并自动连接调试器。

在WebStorm菜单中跑步选择编辑配置...。然后点击+并选择笑话。(可选)指定Jest配置文件,其他选项和环境变量。保存配置,将断点放在代码中,然后单击绿色调试图标以开始调试。

如果您使用的是使用Facebook的Create-React-App,在Jest运行/调试配置中指定了路径反应脚本包在Jest包字段中并添加--env = jsdom.到了Jest选项字段。

缓存问题

变换脚本已更改或BABEL已更新,并且Jest无法识别更改?

重试- nno-cache.。Jest缓存转换模块文件以加速测试执行。如果您使用的是您自己的自定义变压器,请考虑添加agetcachekey.功能:getcachekey在继电器中

未解决的承诺

如果承诺根本无法解决,则可能会抛出此错误:

- 错误:超时 - 在内部不会调用异步回调 超时 由jasmine.default_timeout_interval指定

最常见的是,这是由冲突的承诺实现引起的。例如,考虑用自己的方式取代全球承诺实现Global.Promise = Jest.RequireAction('承诺');和/或将使用的88个库巩固到一个单个。

如果您的测试长期运行,您可能希望考虑通过呼叫增加超时jest.settimeout.

笑话 索取 10000 ; // 10秒超时

守望者问题

尝试跑步Jest- 没有守望人或设置守望者配置选项错误的

还要看看守望者故障排除

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

虽然Jest在现代多核计算机上具有快速SSD的大多数时间非常快,但在某些设置中可能会缓慢为我们的用户发现

基于这一点发现,减轻此问题的一种方法,提高速度高达50%是顺序运行测试。

为此,您可以使用相同的线程运行测试- runinband.

#使用Jest CLI
jest - runinband.
#使用yarn测试(例如,使用Create-React-App)
测试 - runinband.

加速在持续集成服务器上的测试执行时间等替代方案,例如Travis-CI是将Max Worker Pool设置为〜4.。特别是在特拉维斯-CI上,这可以减少一半的测试执行时间。注意:Travis CI自由可用于开源项目的计划仅包括2个CPU内核。

#使用Jest CLI
jest --maxworkers. = 4.
#使用yarn测试(例如,使用Create-React-App)
测试 --maxworkers. = 4.

coveragepatepathorepatterns.似乎没有任何影响。

确保您没有使用Babel-Plugin-Istanbul插入。jest wraps istanbul,因此也告诉istanbul用覆盖收集来介绍一个文件。使用时Babel-Plugin-Istanbul,Babel处理的每个文件都有覆盖收集代码,因此它不会被忽略coveragepatepathorepatterns.

定义测试

必须同步定义测试,以便能够收集测试。

作为一个例子来展示为什么这是这种情况,想象一下我们写了一个如此:

//不这样做它不起作用
索取 => {
'通过' => 预计 1 成为 1 ;
} 0. ;

当Jest运行您的测试时收集测试s将找不到任何,因为我们已在事件循环的下一个刻度上设置定义以异步发生。

笔记:这意味着您使用时test.each.您无法在a中异步设置表摘要/Beforeall.

还是未解决的?

亚搏取款

上次更新了经过SébastienLorber.