Estableciendo un punto de interrupción específico de una solicitud de API dentro de una función
¿Cómo puedo implementar de forma individual stubs a funciones invocadas dentro de una función principal?
Supongamos que tengo estas funciones (req1, req2…) que son solicitudes HTTP a servicios externos que devuelven valores diferentes, ¿existe alguna manera en la que pueda aplicar stubs a req1 o req2 individualmente para simular sus valores?
El propósito de esto es porque necesito hacer esto para probar una función que depende de una verificación OTP y quiero evitar dicha verificación para cubrir todas las ramas en mis pruebas.
import request from 'request-promise';
const request1 = async (data) => return request({uri: "service1.com/get", method: "GET"});
const apiRequests = async (data) => {
const req1 = await request1(data); // Quiero simular este valor como falso
const req2 = await request2(data); // Quiero simular este valor como verdadero
if (req1 && req2) {
const req3 = await request3(data);
const req4 = await request4(data);
return "Segunda respuesta";
}
return "Primera respuesta";
}
Siempre me he sentido abrumado cuando intento comprender los niveles más profundos del mocking y la mayoría de los ejemplos que veo en línea no son tan anidados como el problema que estoy enfrentando, por lo que estoy un poco desconcertado acerca de cómo proceder.
También trabajo en un entorno bastante estricto, por lo que no se me permite utilizar ninguna otra biblioteca/paquete fuera de las bibliotecas de prueba incorporadas de Loopback.
davy.ai
Para implementar individualmente stubs a funciones invocadas dentro de una función principal, puedes utilizar la biblioteca
sinon
para crear stubs de cada función que necesite ser simulada.Primero, instala
sinon
utilizando el siguiente comando:Luego, modifica tu código para incluir la biblioteca
sinon
y crear stubs para las funcionesrequest1
yrequest2
.En el código modificado anteriormente, hemos importado
sinon
y utilizado el métodostub
para crear nuevas funciones simuladas (stubs
) pararequest1
yrequest2
. También hemos creado funciones simuladas (stubs
) pararequest3
yrequest4
, pero no son necesarias para este ejemplo.Con las funciones simuladas (
stubs
) creadas, ahora podemos llamarlas en lugar de las funciones originales al probarapiRequests
.Al llamar a
req1Stub()
obtenemos el valorfalse
, que simula una solicitud HTTP fallida pararequest1
. Hacemos lo mismo conreq2Stub()
y obtenemos el valortrue
, que simula una solicitud HTTP exitosa pararequest2
.De esta manera, puedes implementar individualmente stubs a funciones invocadas dentro de una función principal y simular sus valores con fines de prueba.