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 burlar una función importada en ts-mock.

Soy nuevo en TypeScript y estoy probando aws-lambda.

Estoy intentando realizar pruebas unitarias a mi manejador, por lo que necesito simular la clase de servicio para que devuelva algunos datos simulados.

A continuación, tengo una función simple que obtiene los datos del servicio de dominio.

Manejador:
Imagen del código

Servicio:
Imagen del código

Prueba:
Imagen del código

Cuando ejecuto la prueba utilizando npx mocha, muestra lo siguiente:
Imagen de la salida

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para simular la clase de servicio en su prueba unitaria, puede utilizar una biblioteca de simulación como ts-mockito. Aquí hay un ejemplo de cómo puede simular la clase DomainService en su prueba:

    import { expect } from 'chai';
    import { anything, instance, mock, when } from 'ts-mockito';
    import { DomainService } from './service';
    import { handler } from './handler';
    
    describe('handler', () => {
      const mockedService = mock(DomainService);
      const mockData = { id: 'mock-id', name: 'mock-name' };
    
      beforeEach(() => {
        when(mockedService.getData(anything())).thenResolve(mockData);
      });
    
      it('should return data from the service', async () => {
        const service = instance(mockedService);
        const result = await handler({ id: '1' }, null, service);
    
        expect(result).to.deep.equal({
          statusCode: 200,
          body: JSON.stringify(mockData)
        });
      });
    });
    

    En este ejemplo, primero creamos una instancia simulada de la clase DomainService utilizando mock(DomainService) de ts-mockito. También definimos algunos datos simulados que el servicio debe devolver.

    En el bloque beforeEach, utilizamos when() de ts-mockito para configurar el comportamiento del método getData() del servicio simulado. Le indicamos que devuelva el objeto mockData cada vez que se llame con cualquier argumento (anything()).

    Finalmente, en el caso de prueba, creamos una instancia del servicio simulado utilizando instance(mockedService) y la pasamos como tercer argumento a la función handler(). Luego comprobamos si la función handler() devuelve una respuesta HTTP con un código de estado 200 y un cuerpo de respuesta que coincide con el objeto mockData.

    Ejecutar npx mocha ahora debería mostrar que la prueba se pasa correctamente:

      handler
        ✓ should return data from the service
    
    
      1 passing (15ms)
    

    Tenga en cuenta que este ejemplo solo simula el método getData() de la clase DomainService. Si su función handler() llama a otros métodos del servicio o realiza otras llamadas externas, deberá simularlos también utilizando when() y posiblemente otros métodos de ts-mockito.

Comments are closed.