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

ТестуванняАсинхронногоКоду

АсинхроннийкодєДужепоширенимвjavascript。КолиУВасєКод,якийпрацюАсинхронно,jestПовинензнати,Коликод,щотестушться,ЗакінчивСвоюРоботупередтим,якперейтидонаступноготесту。距离JestДозволяюєезробитиКількомаспособами。

зворотнівиклики.

НайбільюПопулярнимАсинхроннимПаттерномєзворотніВиклики。

Наприклад,Нехайувасєфункціяfetchdata(回调),якаотримуюданіівикликає回调(数据),колиданіотримано。您希望测试此返回的数据是字符串'花生酱'

默认情况下,Jest测试完成后完成其执行结束。这意味着这个测试将会不是按预期工作:

//不要这样做!
测试 '数据是花生酱' => {
功能 打回来 数据 {
预计 数据 成为 '花生酱' ;
}
fetchdata. 打回来 ;
} ;

проблемавтому,щотестзакінчуштьсяктількивиконаштьсякодфункцішfetchdata.,дотого,кбудевиконанозворотнійВиклик。

існуюАльтернативнийВигляд.Тесту.,кийцевиправляю。Замістьтого,щобписатитествфункцібезаргументів,Використайтеаргумент完毕。втакомувипадкуjestчекатимевиконаннязворотньоговиклику完毕Передтим,якзавершититест。

测试 '数据是花生酱' 完毕 => {
功能 打回来 数据 {
尝试 {
预计 数据 成为 '花生酱' ;
完毕 ;
} 抓住 错误 {
完毕 错误 ;
}
}
fetchdata. 打回来 ;
} ;

如果完毕()从未调用过,测试将失败(随超时错误),这就是您要发生的事情。

如果是预计语句失败,它会抛出错误和完毕()不被称为。如果我们想在测试记录中看到它为什么失败,我们必须包裹预计在一个尝试阻止并通过错误抓住块到完毕。否则,我们最终结束了不透明的超时错误,不显示收到的值期待(数据)

Проміси.

如果您的代码使用承诺,则可以在处理异步测试中有更直接的方式。从您的测试中返回承诺,jest将等待该承诺来解决。кщопромісБудевідхилений,ТестАвтоматичновпаде。

例如,让我们这么说fetchdata.,而不是使用回调,返回应该解析到字符串的承诺'花生酱'。我们可以用:

测试 '数据是花生酱' => {
返回 fetchdata. 然后 数据 => {
预计 数据 成为 '花生酱' ;
} ;
} ;

будьтевпевнененішовиповерташтесамепроміс,кщовипропуститенструкцію返回,ВаютестзавершитьсядоМоментуколипромісзfetchdata.Будевирішен我那么()ЗможевиповнитисвійзворотнійВиклик。

如果您希望承诺被拒绝,请使用。抓住方法。Незабудьтедодати.期待щобПереконатися,щопевнакількістьперевірокбулавиконана。否则,实现的承诺不会失败。

测试 'fetch失败了错误' => {
预计 断言 1 ;
返回 fetchdata. 抓住 E. => 预计 E. 匹配 '错误' ;
} ;

.resolves./。重点

你也可以使用.resolves.匹配在您的期望陈述中,jest将等待该承诺来解决。кщопромісБудевідхилений,ТестАвтоматичновпаде。

测试 '数据是花生酱' => {
返回 预计 fetchdata. 解决 成为 '花生酱' ;
} ;

Будьтевпевненененішовиповерташтетвердження - якщовипропуститеінструкціш返回,ВаютестбудезавершенодоМоментуякпромісповернутийЗfetchdata.Будевирішента然后()ЗможевиповнитисвійЗворотнійВиклик。

如果您希望承诺被拒绝,请使用。重点匹配者。ВінПрацюАналогічноМатчеру.resolves.。кщопромісбудевиконаноуспішно,「这款Викличепомилкувтесті。

测试 'fetch失败了错误' => {
返回 预计 fetchdata. 拒绝 匹配 '错误' ;
} ;

异步/等待

ОкрімТогоВиможетевикористовувати异步Та.等待увашихтестах。要编写异步测试,请使用异步函数前面的关键字传递给测试。Наприкоад,ТаСамафункціяfetchdata.МожебутиПротестованаТак:

测试 '数据是花生酱' 异步 => {
const 数据 = 等待 fetchdata. ;
预计 数据 成为 '花生酱' ;
} ;
测试 'fetch失败了错误' 异步 => {
预计 断言 1 ;
尝试 {
等待 fetchdata. ;
} 抓住 E. {
预计 E. 匹配 '错误' ;
}
} ;

你可以结合起来异步等待.resolves.或者。重点

测试 '数据是花生酱' 异步 => {
等待 预计 fetchdata. 解决 成为 '花生酱' ;
} ;
测试 'fetch失败了错误' 异步 => {
等待 预计 fetchdata. 拒绝 匹配 '错误' ;
} ;

在这些情况下,异步等待作为承诺示例使用,有效地为与逻辑相同的逻辑。

这些表单中没有一个特别优于其他形式,并且您可以在CodeBase中混合并匹配它们,甚至可以在单个文件中匹配。它只是取决于您觉得哪种风格使您的测试更简单。