inflearn logo
강의

Course

Instructor

TDD Development by Following [Updated in November 2023]

Write a getProductById unit test (1)

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

384

507pdophs6930

2 asked

0

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

tdd mongodb nodejs express supertest jest mongoose

Answer 5

0

dyonglove

integration test 입니다.

0

nwwn10044507

쭁님 답변감사합니다.

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

0

dyonglove

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

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

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

0

nwwn10044507

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

0

John Ahn

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

0

507pdophs6930

아,, 감사합니다!

추가적으로, 이번 강의를 보면서 기존에 만들어 놓은 서버 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)
 

TypeError: user_model_1.default.create is not a function

0

253

1

에러 처리를 위한 단위테스트 작성

0

344

1

res.status(201) 부분에서 typeerror가 발생합니다

0

387

1

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

0

333

1

[MAC] PORT:5000번 관련 에러

0

272

0

테스트를 위한 데이터베이스를 생성해야하나요?

0

401

1

Postman 사용방법에 대해서

0

400

1

jest.fn() 을 할당할때 타입스크립트에서 에러가 발생합니다.

0

443

1

라우터를 돌릴 때

0

352

1

npm run start를 실행할 때 부터가 이상합니다.

1

431

1

node.js에 대한 이상점

0

453

1

nodemocks 오류나니까 뺴고 설치하셔요

1

409

1

Node.js 앱을 테스트하기 위한 Jest 설정 부분..

0

271

0

models 파일만 첫번째 글자를 대문자로 해주는 이유

0

297

1

mongodb project 및 cluster관련

0

327

0

무조건 failure case 로 넘어가시는 분들

2

258

1

올려둔 ES6 Express Jest Boilerplate Template 으로 개발 중이신 분들...

0

236

0

ES6 사용하고 싶은 분들...

1

359

0

Jest did not exit one second after the test run has completed. 이슈

0

3039

3

왜 인자네개 함수 안만들어도 포스트맨에서는 에러메세지가 나오는 것인가요?

0

300

2

통합 테스트에 관한 질문 이 있습니다.

0

238

1

bodyParser 대체에 관한 질문

0

418

2

Cannot log after tests are done. Did you forget to wait for something async in your test?

0

2118

1

안녕하세요. 문의드립니다.

0

199

1