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.