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.

Burlándose de TypeORM con Jest

¿Cómo puedo simular los métodos del repositorio de TypeORM con Jest?

Por ejemplo, tengo:

someRepository.createQueryBuilder().select().getManyAndCount()

¿Cómo puedo simular esto? ¿Tengo que simular cada método hasta el último? Pero esta forma parece mala porque la secuencia de métodos podría ser diferente en diferentes consultas y necesitaré simular el objeto de retorno con todos los métodos para cada método.

Y también, por ejemplo, si la respuesta es que necesito simular cada método uno por uno, ¿cómo puedo hacerlo desde el archivo de prueba? Incluso si simulo someRepository.createQueryBuilder() para devolver { select: () => console.log('hi') }, no podré acceder a este método select en archivo de prueba a través de someRepository.createQueryBuilder().select().

¿Qué debo hacer?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para simular los métodos de repositorio de TypeORM con Jest, puede utilizar la función jest.mock para reemplazar el objeto de repositorio real con un objeto simulado.

    Aquí hay un ejemplo de simulación del método getManyAndCount del objeto someRepository:

    // Define el objeto simulado
    const objetoSimulado = {
      createQueryBuilder: jest.fn().mockReturnThis(),
      select: jest.fn().mockReturnThis(),
      getManyAndCount: jest.fn().mockReturnValue({ items: [], count: 0 }),
    };
    
    // Simula el objeto de repositorio
    jest.mock('ruta/hacia/algunRepositorio', () => ({
      getRepository: jest.fn().mockReturnValue(objetoSimulado),
    }));
    
    // Prueba el código que llama someRepository.createQueryBuilder().select().getManyAndCount()
    test('prueba de ejemplo', async () => {
      // Llama al código que utiliza el método de repositorio
      const resultado = await someService.getSomeData();
    
      // Asegura que se llamó al método simulado con los parámetros esperados
      expect(mockRepository.createQueryBuilder).toHaveBeenCalled();
      expect(mockRepository.select).toHaveBeenCalled();
      expect(mockRepository.getManyAndCount).toHaveBeenCalled();
    
      // Asegura que el código devuelve el resultado esperado
      expect(result).toEqual({ items: [], count: 0 });
    });
    

    En este ejemplo, se define un objeto de repositorio simulado con los mismos métodos que el objeto de repositorio real. Luego utilizamos jest.mock para anular la función getRepository de TypeORM y devolver el objeto de repositorio simulado.

    Al simular el objeto de repositorio de esta manera, podemos controlar el comportamiento de cada método del repositorio, incluido el orden en que se llaman y los valores de retorno de cada método.

    En la función prueba de ejemplo, llamamos al código que utiliza el método de repositorio y nos aseguramos de que los métodos simulados se hayan llamado con los parámetros esperados. También aseguramos que el código devuelva el resultado esperado, que en este caso es un objeto con una matriz vacía de elementos y un recuento de 0.

    En general, la simulación de los métodos de repositorio de TypeORM con Jest requiere alguna configuración, pero nos permite probar exhaustivamente nuestro código sin depender de una base de datos real.

Comments are closed.