Saltar al contenido

sinon spy no se llama en un stub con función asíncrona

Puede que se de el caso de que halles algún problema en tu código o trabajo, recuerda probar siempre en un ambiente de testing antes añadir el código al trabajo final.

Solución:

Api.get es una función asíncrona y devuelve una promesa, por lo que para emular una llamada asíncrona en la prueba, debe llamar resolves función no returns:

Hace que el stub devuelva una Promesa que se resuelve en el valor proporcionado. Al construir Promise, sinon usa el método Promise.resolve. Usted es responsable de proporcionar un polyfill en entornos que no proporcionen Promise.

sinon
  .stub(Api, 'get')
  .resolves('ok');

tu console.log(data) siempre sucede porque su Promesa se resuelve, solo lo hace después de que finaliza la prueba, por lo que falla la afirmación.

Al envolverlo en un setTimeout, crea otro evento en el ciclo, lo que permite que su Promesa se resuelva antes de que finalice la prueba, lo que significa que su afirmación ahora pasará.

Este es un problema bastante común cuando se realizan pruebas unitarias de código asíncrono. A menudo se resuelve envolviendo las afirmaciones en setImmediate y llamando done de la devolución de llamada de setImmediate.

https://stackoverflow.com/a/43855794/6024903

Reseñas y puntuaciones

Recuerda algo, que te damos el privilegio agregar una reseña si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *