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

지루한 산호님의 프로필 이미지
지루한 산호

작성한 질문수

따라하며 배우는 TDD 개발 [2023.11 업데이트]

getProductById 단위 테스트 작성 (1)

integration 테스트시, 몽고디비에 데이트 업데이트 되는 이유.

작성

·

209

0

안녕하세요. 수업 잘 듣고 있습니다. 궁금증이 생겨서 질문 남깁니다.
 
테스트시 결국에 디비와 의존성을 갖지 않기 위해 jest.fn()을 이용해서 유닛테스트를 진행하는 걸로 이해를 했는데, 그래서 디비에 데이터가 쌓이지 않아야 한다고 생각했는데, 강의 하신걸 보고 디비를 보니 데이터가 쌓여 있더라구요.
 
통합 테스트 과정에서 생긴 것 같은데, 통합 테스트 시에 생기는 이유는 실제로 post('/api/products') 이런식으로 요청을 날렸기 때문인가요?
 
유닛 테스트에는 실제로 요청을 날리는 부분이 없어서.. 그 차이가 무엇인가요?

답변 5

0

integration test 입니다.

0

쭁님 답변감사합니다.

"아이티테스트"가 뭔가요?

0

라푼젤님 제가 강사님은 아니지만 강의를 들으면서 제가 이해한 내용을 공유해보고 싶습니다.

아마 유닛테스트로는 코드가 의도대로 만들어졌는가를 검증하는것 같고, 그걸 검증하기 위해서 우선, 함수가 있나, 정상인경우엔 200을 반환하는가, 이셉션처리가 되어있는가를 보고, 그걸 위해 디비까지 쓸 필요는 없으니 막함수와, 미리 예측되는 결과를 넣어서 테스트를 하는것 같구요,

라푼젤님이 테스트해야한다고 생각하는 부분은 아이티테스트에서 진행되고있는것 같습니다.

0

John Ahn님 저도 윗댓글 쓴님과 동일하게 이해했는데, 유닛테스트 할때 postman에서 api 날릴때 부터 DB에 생성되더라구요. 근데  생각해보면  우리가 구현한것이 잘 동작하는지 확인하려면 DB에 생성되는거 까지 확인하는게 맞는것이 아닌가 생각이 들더라구요.  왜냐면 실제로 만들어서 돌아가?는것은 DB에 잘 생성되야하고, DB에 생성된걸 읽어와야하고, DB에 생성된 데이터를 업데이트 해야하고, DB에 생성된 데이터를 삭제하려면, 우선 DB에 데이터가 생성되는거 까지 확인하는게 맞지 않나 싶습은데 잘못 이해하고 있는건가요?

0

John Ahn님의 프로필 이미지
John Ahn
지식공유자

안녕하세요 !!! 
넵  말씀하신대로 유닛테스트에서는 실제 디비를 통하지 않기 때문에 디비에 쌓이지 않지만 통합테스트는 
실제로 디비까지 포함해서 테스트를 합니다 그떄 디비에 데이터 쌓인거 아닌가요 ~ !? ㅎㅎ 

아,, 감사합니다!

추가적으로, 이번 강의를 보면서 기존에 만들어 놓은 서버 api들을 리팩토링 했는데 

router의 위치에 따라 되고 안되는게 있던데 이유가 있을까요? 

 

예를 들면,

router.get('/recomment/:commentid', getRecoment)에 대해서

이처럼 맨 위에 있을 때는 작동하는데, 아래처럼 사이에 껴있을 때는 422 반환을 하던데 왜 그런걸까요? ㅠㅠ

router.get('/recomment/:commentid', getRecomment)
router.get('/all', getAllPlaylists)
router.get('/all/:page', getNextAllPlaylists)
router.post('/', createPlaylist)
router.post('/edit', editPlaylist)
router.delete('/:id', deletePlaylist)
router.post('/imgUpload', upload.fields([{name: 'img'}, {name: 'playlistId'}]), uploadImage)
router.get('/:id/:postUserId', getSelectedPlaylist)
router.post('/comment/:id', createComment)
router.delete('/comment/:id/:commentid', deleteComment)
router.post('/recomment/:id/:commentid', createRecomment)
router.delete('/recomment/:commentid', deleteRecomment)
router.post('/like/:id', likePlaylist)
router.delete('/like/:id', unLikePlaylist)
router.post('/likecomment/:playlistid/:id', likeComment)
router.delete('/likecomment/:playlistid/:id', unLikeComment)
router.post('/likerecomment/:commentid/:id', likeRecomment)
router.delete('/likerecomment/:commentid/:id', unLikeRecomment)
router.post('/userSong/:playlistId', createUserSong)
router.delete('/userSong/:playlistId/:userSongId', deleteUserSong)
 
 
router.get('/all', getAllPlaylists)
router.get('/all/:page', getNextAllPlaylists)
router.post('/', createPlaylist)
router.post('/edit', editPlaylist)
router.delete('/:id', deletePlaylist)
router.post('/imgUpload', upload.fields([{name: 'img'}, {name: 'playlistId'}]), uploadImage)
router.get('/:id/:postUserId', getSelectedPlaylist)
router.post('/comment/:id', createComment)
router.delete('/comment/:id/:commentid', deleteComment)
router.get('/recomment/:commentid', getRecomment)
router.post('/recomment/:id/:commentid', createRecomment)
router.delete('/recomment/:commentid', deleteRecomment)
router.post('/like/:id', likePlaylist)
router.delete('/like/:id', unLikePlaylist)
router.post('/likecomment/:playlistid/:id', likeComment)
router.delete('/likecomment/:playlistid/:id', unLikeComment)
router.post('/likerecomment/:commentid/:id', likeRecomment)
router.delete('/likerecomment/:commentid/:id', unLikeRecomment)
router.post('/userSong/:playlistId', createUserSong)
router.delete('/userSong/:playlistId/:userSongId', deleteUserSong)
 
지루한 산호님의 프로필 이미지
지루한 산호

작성한 질문수

질문하기