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.

Cómo probar el código try catch en Javascript utilizando Jest e incluyendo una llamada a next() con middleware en Express?

Estoy creando una API y quiero saber cómo probar un bloque try catch. Quiero asegurarme de que el error capturado por el bloque se pase a través de next() en express al siguiente middleware.

Aquí hay un ejemplo, este es mi callback para el método POST:

function create(req, res, next) {
  try {
    const data = {}
    response(req, res, data, 201)
  } catch (error) {
    next(error)
  }
}

Quiero probar que se llama a next(). Estoy planeando usar sinon para hacerlo, pero quiero simular el error y verificar que se capture el error.

Esta es una captura de pantalla de mi cobertura en jest.

Imagen

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para probar un bloque try-catch en un middleware de express utilizando sinon, puedes seguir estos pasos:

    1. Crea un archivo de prueba unitaria para la función create e importa las dependencias necesarias como se muestra a continuación:
    const sinon = require('sinon')
    const { create } = require('./create') // importa la función que se va a probar
    
    1. Crea un objeto de respuesta simulado utilizando sinon. Esto te permitirá verificar si la función next es llamada con un error.
    const res = {
      status: sinon.stub().returnsThis(),
      json: sinon.stub().returnsThis(),
    }
    
    1. Crea una declaración throw para simular un error y pásala a la función create.
    it('should call next with an error when create function throws an error', () => {
      const error = new Error('Something went wrong')
      sinon.stub(global, 'response').throws(error) // lanza el error cuando se llama a `response`
    
      create({}, res, (err) => {
        expect(err).toBe(error) // verifica si el error pasado a next es el mismo que el error lanzado
        sinon.assert.calledOnce(res.status) // verifica si se llamó al método status una vez
        sinon.assert.calledWith(res.status, 500) // verifica si se llamó al método status con un código de estado 500
        sinon.assert.calledOnce(res.json) // verifica si se llamó al método json una vez
        sinon.assert.calledWith(res.json, {error: 'Internal Server Error'}) // verifica si se llamó al método json con el mensaje de error apropiado
      })
    })
    
    1. En la función de prueba, llama a la función create y pasa un objeto de solicitud vacío, el objeto de respuesta simulado y una función de devolución de llamada que acepte un parámetro err. En la función de devolución de llamada, utiliza el método expect para verificar si el parámetro err es igual al error que se lanzó. Además, utiliza sinon.assert para verificar si los métodos de respuesta (status y json) fueron llamados con los argumentos apropiados.

    2. Ejecuta la prueba y verifica el informe de cobertura para asegurarte de que el bloque try-catch esté cubierto por la prueba unitaria.

Comments are closed.