es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Prueba de Express Supertest antes de invocar una API externa de Node.js.

No estoy seguro si esto es posible, pero me gustaría ejecutar una prueba sin invocar una solicitud POST a una API externa.

Lo que está sucediendo actualmente es que tengo una prueba que confirma que los datos enviados a mi API del servidor se procesan correctamente, ya que necesita agregar información adicional básica al CUERPO antes de enviarlo a la API externa, y luego el servidor realiza otra solicitud POST a una API externa con este CUERPO modificado.

Todo esto se hace en la siguiente función.

createUser(req,res){
...
// validación del esquema,

// agregando campos

// solicitud POST al servidor externo

}

¿Es posible hacer que mi prueba ignore la llamada a la API externa?

La prueba se ve así:

it('POST users -> 200 Successful Post', () => {
        return request(app).post('/api/users').send(........ mi json .......)
        .expect('Content-Type', /json/)
        .expect(200)
        .then((response) => {
            expect(response.body).toEqual(
                ......
            )
        })
    });
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible hacer que su prueba ignore la llamada a la API externa. Esto se puede lograr utilizando un stub o un mock para interceptar la llamada a la API externa y devolver una respuesta o datos predefinidos. De esta manera, su prueba se centrará únicamente en probar la funcionalidad de su API de servidor, sin invocar la API externa.

    Por ejemplo, puede utilizar una biblioteca como Sinon.js para crear un stub o un mock para la llamada a la API externa. El stub o mock se puede configurar para devolver una respuesta predefinida o simplemente no hacer nada.

    Aquí hay un ejemplo de cómo puede utilizar un stub para interceptar la llamada a la API externa en su prueba:

    const sinon = require('sinon');
    const axios = require('axios');
    // ...
    
    it('POST usuarios --> 200 Post Exitoso', () => {
      // crear un stub para el método axios.post
      const axiosPostStub = sinon.stub(axios, 'post');
      // configurar el stub para no hacer nada (es decir, no invocar la API externa)
      axiosPostStub.resolves();
    
      return request(app).post('/api/usuarios').send(........ mi json .......)
        .expect('Content-Type', /json/)
        .expect(200)
        .then((response) => {
          expect(response.body).toEqual(
              ......
          );
          // afirmar que el stub fue llamado una vez
          sinon.assert.calledOnce(axiosPostStub);
        })
    });
    

    Nótese que en el ejemplo anterior, creamos un stub para el método axios.post y lo configuramos para no hacer nada (es decir, resolves()). De esta manera, cuando su código llama al método axios.post, el stub intercepta la llamada y no devuelve nada, ignorando efectivamente la llamada a la API externa.

    También nótese que agregamos una afirmación sinon.assert.calledOnce para verificar que el stub realmente fue llamado. Esto es importante para asegurarse de que su prueba esté realmente probando lo que usted pretendía probar.

    En general, el uso de stubs o mocks en sus pruebas puede ayudar a simplificar los casos de prueba y acelerar las pruebas, al reducir la necesidad de realizar llamadas a API externas o realizar tareas de configuración complejas.

Comments are closed.