이전에 서비스에서 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