[정리] supertest를 이용한 통합테스트 정리

2021. 1. 29. 15:08프로그래밍-Web/Jest(TDD)

유닛테스트와는 다르게, 통합테스트는 DB의 처리로직을 포함한 API의 모든 트랜젝션 과정이 제대로 수행되었는지를 테스트한다.

그래서 보통은 Mock을 사용하지 않는다.

여기에서는 supertest라는 라이브러리를 사용하고, 실제 DB에 접근해야 하므로 mongoose 객체도 불러와준다

또한 app이라는 이름으로 서버의 index파일도 받았는데, 이는 트랜젝션 환경이 그대로 구축되어야 하기 때문이다.

(이때문에 서버의 index 파일을 별개로 익스포트 해줘야 한다)

 

작업시작전에 DB와 연결이 되어야한다.

통합테스트가 트랜젝션의 올바른 수행을 검사한다는 측면이 크기 때문이다.

이전에 내 블로그에서 정리했던글처럼 test로 빌드하면 init파일에서 DB에 접근토록한다

 

기본적인 테스트 구문은 유닛테스트와 동일하다

다만 supertest에서 불러온 request 메소드를 이용하여 app객체를 전달한다.

이후 post로 api의 경로를 설정하고, send로 테스트데이터를 post한다

 

각 행위에대해 정상적인 트렌젝션이 일어났다면, 테스트데이터의 데이터와 res의 데이터 항목이 같을것이다.

 

에러도 마찬가지다

예시 코드의 모델은 name과description이 required로 되어있지만, name만 보내보았다

body에는 에러메시지가 담겨야할것이다.