[jest] custom repository에서 createQueryBuilder mocking

·2021년 12월 11일
0

이전에 서비스에서 createQueryBuilder를 mocking 한 것 처럼 custom repository에서 동일한 방식으로 mocking을 하려 하면 createQueryBuilder의 반환형인 SelectQueryBuilder의 모든 것을 구현해야 한다.

에러 메시지

Type '{ leftJoinAndSelect: () => ...; where: () => ...; andWhere: () => ...; getOne: () => Game; }' is missing the following properties from type 'SelectQueryBuilder<Game>': getQuery, subQuery, select, addSelect, and 107 more.ts(2740)

위와 같은 에러를 피하기 위해 module을 mocking 할 수 있다.
바로 jest.requireMock()을 사용하는 것이다.
jest.requireMock(<모듈 이름>) 을 사용하면 해당 모듈을 mocking 할 수 있다.
따라서 위의 코드는 아래와 같이 수정하여 mocking하고 테스트를 진행할 수 있다.

      jest
        .spyOn(gameRepository, 'createQueryBuilder')
        .mockImplementation(() => {
          const mockModule = jest.requireMock('typeorm');
          return {
            ...mockModule,
            leftJoinAndSelect: jest.fn().mockReturnThis(),
            where: jest.fn().mockReturnThis(),
            andWhere: jest.fn().mockReturnThis(),
            getOne: () => null,
          };
        });

참고: https://www.tutorialguruji.com/javascript/how-to-unit-test-typeorm-getrepository-with-jest/amp/
https://jestjs.io/docs/jest-object#jestrequiremockmodulename

0개의 댓글