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

TestsdeCódigoasincrónico

escúnenjavascript ejecutarcódigode formaasincrónica。SiTienesCódigoque ejecuta de formaasincrónica,jest debe saber cuando ha terminado elCódigoque seestápanando,Antes de que pasar a Otra测试。jest tiene varias formas de Manejar Esto。

回调

ElPatrónAsincrónicoMásComúnESLOS回调。

Por Ejeallo,Supongamos Que Tienes UnaFunciónfetchdata(回调)que treae algunos datos y llama a回调(数据)Cuando Esta完成。您希望测试此返回的数据是字符串'花生酱'

POR DEFECTO,JEST DA POR Completadoos LOS测试UNA VEZ Que LLEGAN AL Final de SuEjecución。Esto意义Que Este测试Funciona como estaba previsto:

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

EL问题es que el testterminarátan pronto comofetchdata.最终确定,Antes de Llamar A La Funcion回调。

干草Una Forma alternativa de测试que corrige esto。En Vez de Poner El测试en UnaFunciónConiArcumentoVavío,利用者联合国独奏Argumento Llamado完毕。JestEsperaráHastaQue Se Llame El Callback de完毕蚂蚁de terminar la prueba。

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

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

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

Promesas.

如果您的代码使用承诺,则可以在处理异步测试中有更直接的方式。从您的测试中返回承诺,jest将等待该承诺来解决。Si Se Rechaza La Promesa,La PruebaFallaráApiramáticamente。

por ejealto,digamos quefetchdata.,en Lugar de Usar联合国“回调”,Devuelve Una Promesa Que SupeStamenteResolveráALaCadena de Texto'花生酱'。Podríamostestearlo con:

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

一定要返回承诺 - 如果你省略这个返回声明,您的测试将在返回的承诺之前完成fetchdata.解析,然后()有机会执行回调。

如果您希望承诺被拒绝,请使用。抓住方法。asegúratedeañadir.期待Para Verificar Que Un CiertoNúmerodeFirmacionesestánSiendoLlamadas。否则,实现的承诺不会失败。

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

.resolves./。重点

TambiénPuedeUtherizar El Marcador.resolves.en tuaganciónde“期待”y jestesperaráaque esa promesa resuelva。Si Se Rechaza La Promesa,La PruebaFallaráApiramáticamente。

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

务必返回断言 - 如果您省略此问题返回声明,您的测试将在返回的承诺之前完成fetchdata.已解决,然后()有机会执行回调。

如果您希望承诺被拒绝,请使用。重点匹配者。ActúaAnálogamenteal Marcador.resolves.。SI SE Cumple La Promesa,El TestFallaráApiráticamente。

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

异步/等待

Como Alternativa,SE佩德USAR异步y等待测试。要编写异步测试,请使用异步函数前面的关键字传递给测试。Por Ejeallo,Puede Proparse El Mismo Escenariofetchdata.骗子:

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

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

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

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

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