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

Rezolvarea problemelor

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

Testele cad şi ştii de ce#

Încercaţi să utilizaţi suportl de depanare încorporat în节点。注意:这只在Node.js 8+中有效。

浦那ţi o declaraţie调试器;în oricare din teste, şi apoi, în proiectul vostru, rulați:

节点——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在你有时间之前执行)。Faceţi clic pe butonul care is simbolul "play" în partea superioară dreaptă a ecranului pentru a continua execuția。Când Jest execută testul care conţine declaraţia调试器, execuția se va opri şi puteţi examina stiva de apeluri şi scope-ul current。

注意:——runInBandcli选项确保Jest在同一个进程中运行测试,而不是为单个测试生成进程。În mod normal Jest paralelizează testele pe mai multe processes, dar este dificilă depanarea mai multor process care rulează în acelaşi timp。

Depanarea în VS Code#

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

Să ataşaţi debug -ul incorporated, rulaţi testele în felul următor:

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

Apoi ataşaţi debugger-ul VS Code folosind următoarea configurationlaunch.json:

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

Pentru lansarea automată şi ataşarea la un proces care execută testele, utilizaţi următoarea configuraţie:

{
“版本” : “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
}
]
}

Dacă utilizaţi pachetul de la Facebookcreate-react-app, puteţi depana testele Jest cu următoarea configurație:

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

我的地址是informaţii despre depanarea Node pot fi găsiteaici

在WebStorm Depanarea#

我的想法很简单,我的想法很简单înWebStorm埃斯特utilizandconfigurarea Jest运行/调试。Va lansa teste şi Va atașa自动调试。

在meniul WebStorm运行selectaţ我编辑配置…。Apoi faceţi clic pe+ş我selectaţ我开玩笑。Opţional specificaţi fişierul de configurare Jest, opţiuni补充şi变量de mediu。Salvaţi configuraţia, puneți breakpoints în cod, apoi faceţi clic pe pictograma verde de depanare pentru a începe depanarea。

Dacă utilizaţi pachetul de la Facebookcreate-react-app, în configuraţia Jest运行/调试specificaţi calea către pachetulreact-scriptsîn proprietatea joke şi adăugați——env = jsdomîn câmpul de opţiuni笑话。

的缓存#

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

Încercați din noou cu——no - cache。Jest cache-uie fişierele modulelor transform pentru a accelerera execuția testelor。如果您正在使用自己的自定义转换器,请考虑添加一个getCacheKey功能:getCacheKey在继电器

Promisiuni nerezolvate#

În cazul în我们的关心rezolvă deloc, această eroare ar putea fi aruncată:

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

这与我的承诺相违背。例如,考虑用您自己的promise实现替换全局promise实现全球。= jest.requireActual承诺(承诺);和/或将使用的Promise库合并为一个库。

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

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

问题铜守望#

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

De asemenea咨询ţ我depanarea守望

最大的极值是:și/积分服务器Continuă (CI)。#

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

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

Pentru aceasta puteţi rula teste în acelaşi processes folosind——runInBand:

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

加快持续集成服务器(如Travis-CI)上测试执行时间的另一种方法是将最大工作者池设置为~4。În特定的数据,可以从execuție的数据中找到jumătate。不是ă:Planulgratuitde la Travis CI disponibil pentru proiecte开源包括doar 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

Încă你ați有什么问题吗?#

我需要咨询ţajutor