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 configurar una prueba de Jest para probar una API REST.

Estoy comenzando a aprender las pruebas de Jest y tengo un problema.
Este es mi código para las pruebas:

const getTask = async (req, res) => {
  try {
    const { id: taskId } = req.params;
    const task = await Task.findOne({ _id: taskId });
    if (!task) {
      return res.status(404).json({ msg: `No hay tarea con id: ${taskId}` });
    }
    res.status(200).json({ task });
  } catch (error) {
    res.status(500).json({ msg: error });
  }
};

Esta es la prueba:

const spy = jest.spyOn('../controllers/tasks.js', 'getTask')

await supertest(app)
  .get(`/api/V1/tasks/61cadf4faf43ccd9f0d9d652`)
  .expect(404)

Y tengo este resultado:

No se puede aplicar spyOn a un valor primitivo; se proporcionó un string

21 | it(‘should return 404’, async () => {
22 | const spy = jest.spyOn(‘../controllers/tasks.js’, ‘getTask’)

23 |
| ^
24 | await supertest(app)
25 | .get(/api/V1/tasks/61cadf4faf43ccd9f0d9d652)
26 | .expect(404)

at ModuleMocker.spyOn (node_modules/jest-mock/build/index.js:785:13)
at Object. (test/task.test.js:23:12)

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que la función jest.spyOn() no puede ser utilizada en un valor de tipo cadena. En su lugar, espera un objeto con una función que pueda ser espiada.

    En este ejemplo, parece que la función getTask() está siendo importada como una cadena en lugar de como un objeto desde el módulo ../controllers/tasks.js.

    Para solucionar el problema, puedes importar la función getTask() como un objeto actualizando la declaración de importación de esta manera:

    const { getTask } = require('../controllers/tasks.js');
    

    Luego, actualiza la declaración del espiador de la siguiente manera:

    const spy = jest.spyOn(getTask);
    

    Esto permitirá que la función jest.spyOn() espie correctamente la función getTask() para realizar pruebas.

Comments are closed.