Pruebas en componentes asincronos en React
*
Realizacion de test expresiones asincrona (Promesas)
Done en los test
El codigo se ejecuta de manera lineal, por lo tanto debemos
modificar el archivo de pruebas cuando trabajemos pruebas
asincronas
Debemos enviar el argumento done
al callback en el
archivo del test
La palabra reservada done
busca donde hay un expect
o en su defecto otro done() para ejecutar el proceso asincrono o
espera alrededor de 5 segundos
Nota cuando trabajemos con expresiones asincronas despues del
expect es importante escribir el done para decirle al test que ya
acabamos el proceso y no esperamos mas tareas asincronas.
Si se rechaza la promesa, la prueba fallará automáticamente.
También puede usar el comparador .resolves en nuestra
declaración de espera, y Jest esperará a que se resuelva esa
promesa. Si se rechaza la promesa, la prueba fallará
automáticamente.
Si espera que una promesa sea rechazada,
usaremos el comparador .rejects. Si se cumple la promesa, la
prueba fallará automáticamente.
import { getHeroeById } from '../../src/componenteHeroes.jsx';
export const getHeroeByIdAsync = (id) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
const p1 = getHeroeById(id);
if (p1) {
resolve(p1);
} else {
reject('No se pudo encontrar el heroe');
}
}, 1500);
});
};
import { getHeroeByIdAsync } from '../../src/asincronia.jsx';
import heroes from './5heroes.js';
describe('Prueba con promesas del archivo 6asincronia.js', () => {
test('getHeroeByidAsync debe retornar un heroe async ', (done) => {
const id = 1;
getHeroeByIdAsync(id).then((heroe) => {
expect(heroe).toBe(heroes[0]);
done();
});
});
test('Debe obtener un error si el id del heroe no existe ', (done) => {
const id = 10;
getHeroeByIdAsync(id).catch((error) => {
expect(error).toBe('No se pudo encontrar el heroe');
done();
});
});
});