Cómo probar promesas con Mocha.

“Las promesas” son una tarea habitual para los desarrolladores de JavaScript al ejecutar código asíncrono, pero ¿cómo podemos probarlas?
Siéntete libre de revisar el código en Github o continúa leyendo.
Voy a escribir un método que retorna una promesa, y luego agregaremos una prueba para la promesa resuelta y otra para la rechazada.
La API simulada
Crea un archivo api.js con un arreglo que contenga una lista de equipos y expórtalo.
module. exports = [
{
id: 1,
team: "Raptors",
player: "Kawhi Leonard",
comment: "Raptors are the best east team",
},
{
id: 2,
team: "Lakers",
player: "Lebron James",
comment: "Lakers is out of playoffs",
},
]El código
Crea un archivo llamado teams.js, importa la API usando require y crea la función getTeamByPlayer. Esta función retornará una promesa, usando setTimeout para simular el proceso asíncrono.
Prometemos retornar resolve si se encuentra el equipo con el jugador, o reject con un error si no se encuentra. Exporta la función para poder utilizarla.
getTeamByPlayer es una función simple: toma el jugador y lo busca en nuestro arreglo para retornar resolve si lo encuentra, o reject en caso contrario.
const teams = require("./api")
function getTeamByPlayer(player) {
return new Promise((resolve, reject) => {
setTimeout(() => {
const filterTeams = teams.find((t) => t.player === player)
filterTeams
? resolve({ message: "found", team: filterTeams })
: reject(new Error("not found"))
}, 1000)
})
}
module.exports = { getTeamByPlayer }Las pruebas
Importa assert como en el post anterior y getTeamByPlayer usando require desde teams.js. Utilizando describe e it, configura la prueba de forma similar a mi post anterior.
Pero con una única diferencia: usa async y await. Podemos hacer exactamente lo mismo en las pruebas si ya estás utilizando async y await para manejar tu código asíncrono.
La declaración debe ser async para poder usar await hasta que las promesas se resuelvan o sean rechazadas. Escribe una prueba para encontrar al jugador y otra para obtener el error cuando no se encuentra.
const assert = require('assert')
const { getTeamByPlayer } = require('../src/teams');describe('Get teams from API', () => {
it('Return the team by player', async () => {
const actual = await getTeamByPlayer('Lebron James')
const expect = {
"message": "found",
team: {
id: 2,
team: 'Lakers',
player: 'Lebron James',
comment: 'Lakers is out of playoffs'
}
}
assert.deepEqual(actual, expect);
}) it('Throw a error if player not found', async () => {
const actual = await getTeamByPlayer('Irving').catch((error) => {
assert.equal(error.message, 'not found')
})
})})Ejecuta la prueba con npm test y revisa los resultados.
danys-imac:demo danyparedes$ npm test\> demo@1.0.0 test /Users/danyparedes/Downloads/demo
> mocha
IVA tax calculation
✓ calculate 15 of 1250
✓ calculate the total with 21 IVA
Get teams from API
✓ Find team by team player (1003ms)
✓ Throw an error if the player not found (1004ms)
Four passing (2s)¡Eso es todo!
Espero que esto te dé un buen punto de partida con los métodos asíncronos en Mocha y te ayude a evitar algunos de los errores más comunes. Si te gustó este post, compártelo.
¡Gracias por leer!
Foto de Mufid Majnun en Unsplash
Compartir este artículo
Si esta guía te resultó útil, compártela con tu equipo o con otros desarrolladores.
Software real. Lecciones reales.
Comparto las lecciones que aprendí por las malas, para que puedas evitarlas o estar preparado cuando ocurran.
Únete a 13,800+ desarrolladores y lectores.
Cero spam. Cancela tu suscripción en cualquier momento.