Cuando hablamos de desarrollo de software y de testar promesas, la asincronía es un tema que no podemos evitar, especialmente cuando estamos lidiando con solicitudes a API y otras operaciones que dependen del tiempo de respuesta de terceros.
Jest es una librería de JavaScript muy utilizada para realizar pruebas unitarias en nuestras aplicaciones. Pero ¿por qué es importante testar promesas? La respuesta es simple: la naturaleza asíncrona de las promesas puede conllevar comportamientos inesperados en tu código si no se manejan adecuadamente.
Las promesas y el código asíncrono
Imagina que estás creando una aplicación de recetas. Tienes una función que hace una llamada a una API para obtener una lista de recetas basadas en ingredientes específicos. Esta función es asincrónica, ya que depende de cuándo la API responda. Ahora, si la API está funcionando correctamente y devuelve los datos como se espera, todo está bien. Pero ¿qué sucede si la API está inactiva, si devuelve un error o si los datos que devuelve no son lo que esperabas?
Al testar tu función de recetas con Jest, puedes simular diferentes escenarios (como una respuesta exitosa, una falla de la API o datos inesperados) y asegurarte de que tu aplicación maneja adecuadamente cada uno de ellos. De esta manera, puedes construir una aplicación robusta y confiable que se mantenga en pie.
¿Qué es una promesa?
Una promesa en JavaScript es un objeto que puede representar el valor final de una operación asíncrono. Cuando llamamos a una función que devuelve una promesa (por ejemplo, una llamada a una API), esa función comienza a realizar su trabajo en segundo plano, mientras que el resto de nuestro código continúa ejecutándose.
Código asíncrono y Jest
Cuando se trata de testar código asíncrono en Jest, hay algunas cosas que debes tener en cuenta. La más importante es esta: Jest no “esperará” automáticamente a que se resuelva una promesa antes de continuar con el test. Si no manejas esto adecuadamente, tu prueba fallará de forma automática.
Métodos para testar promesas en Jest
Async y Await
La forma más directa y legible de tratar con promesas en las pruebas es utilizando async
y await
. Al hacer await
de una promesa, Jest sabrá que debe esperar a que se resuelva esa promesa para continuar con el test.
test('prueba de API', async () => {
const data = await fetchData();
expect(data).toBe('peanut butter');
});
En este ejemplo, fetchData()
es una función que devuelve una promesa que se resuelve a ‘peanut butter’. Jest esperará a que esta promesa se resuelva antes de continuar.
Método .resolves
Jest proporciona un método útil llamado .resolves
, que puedes usar en combinación con .toBe
para testar el valor de resolución de una promesa.
test('la promesa se resuelve a peanut butter', () => {
return expect(fetchData()).resolves.toBe('peanut butter');
});
Función callback done
Otra forma de tratar con las promesas es usando una función callback llamada done
, que le indica a Jest que espere a que esta función se llame antes de terminar la prueba.
test('la promesa se resuelve a peanut butter', done => {
function callback(data) {
try {
expect(data).toBe('peanut butter');
done();
} catch (error) {
done(error);
}
}
fetchData(callback);
});
Método .rejects
Además de testar la resolución de una promesa, es posible que también quieras testar lo que sucede cuando una promesa es rechazada. Para hacer esto, puedes usar el método .rejects
.
test('la promesa es rechazada', () => {
return expect(fetchData()).rejects.toMatch('error');
});
Recuerda, el objetivo de las pruebas no es verificar si la API de terceros está funcionando como debería, sino asegurarte de que tu código maneja correctamente las respuestas (o la ausencia de ellas).
Testar promesas puede parecer un campo minado de “x27 peanut butter”, pero con estos consejos y trucos, estarás bien equipado para manejar cualquier promesa que se te presente.
Aprende a testar promesas con nosotros
Si buscas un cambio de vida y te apasiona el mundo del desarrollo web, te invitamos a unirte a nuestro Desarrollo Web Full Stack Bootcamp. Aquí, no solo aprenderás a testar promesas en Jest, sino también a dominar una multitud de habilidades necesarias para ser un desarrollador web de primer nivel. A través de una formación íntegra e intensiva, una metodología que combina teoría y práctica y la guía constante de nuestros expertos en el sector, en pocos meses estarás listo para abrirte paso y triunfar en el mercado laboral IT. ¡Pide más información ahora y descubre cómo cambiar tu vida!