인프런 커뮤니티 질문&답변

guswn2332님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

16-03 Jest 실습

테이블 관계

해결된 질문

작성

·

205

·

수정됨

1

 안녕하세요

예를 들어 MockUserRepository를 만들고 그 안에 mydb라는 데이터가 있습니다.

만약 기존 User 테이블이 Post 테이블과 관계가 맺어져 있다면 Post까지 mydb에 담아야 하나요?

mydb = [{ id= '', name:='', password= '' }] 이렇게 해야 하는 건지

아니면 mydb = [{ id: '', name:'', password: '', post: { id: '', title: ''}] 이렇게 작성해야 하는 건지 궁금합니다!!

 

그리고 userService에서 postService를 사용하는 로직이 있는데 userService 테스트시 MockPost 테이블까지 같이 구현해야 하는 건지..아니면 다른 방법이 있는 건지ㅜㅜ 궁금하네요

 

하나만 더 여쭤보자면.. ㅜㅜ 제가 이해가 잘 안가서 그러는데 controller.ts를 테스트할 때는 service를 mock하고, service.ts를 테스트할 때는 데이터베이스를 mock해서 사용하는 건가요??

답변 2

0

guswn2332님의 프로필 이미지
guswn2332
질문자

감사합니다!!!

0

노원두님의 프로필 이미지
노원두
지식공유자

안녕하세요! guswn2332님!

테스트를 위한 db 구성이므로, 위에 언급해주신대로, mydb = [{ id: '', name:'', password: '', post: { id: '', title: ''}] 와 같은 방식으로 해결하면 될 것 같아요!^^

 

또한, 각 단위테스트는 상호간에 의존하지 않아야하므로 Controller 테스트시 Service는 Mocking하고, Service 테스트시 Repository를 Mocking하는 방법이 좋겠어요!^^
(Controller 테스트시 주입받은 Service가 진짜로 작동하게되면, 해당 테스트는 정확한 Controller테스트가 아니고 Service를 함께 테스트하는 통합테스트가 되어버려요!)

 

또한, DB를 Mocking하는 것은 빠른 단위테스트를 위함이므로, 여럿이 개발한 코드를 하나로 합쳐 최종 배포하기 이전에는 통합테스트 및 E2E 테스트 등을 통하여 실제 테스트DB를 사용하여 연동 테스트까지 진행 이후 배포하실 것을 권장드립니다!^^