테스트
nestjs에서는 테스트 모듈인 jest를 기본적으로 지원한다.
고로 nest를 쓰기 이전과는 다르게 따로 jest를 설치할 필요는 없다.

서비스나 컨트롤러 파일들을 명령어로 만들 때, 이렇게 spec파일이 같이 생기는 것을 볼 수 있다.
이 spec 파일이 바로 테스트 파일이다.
개인적으로 테스트 코드는 굉장히 빡세다고 생각하는데 nest는 이를 자동으로 지원한다.
오오 갓스트 오오

패키지 파일을 살펴보면 우리가 테스트를 하기 위해서 터미널에 어떤 명령을 사용할 수 있는지 나와있다.
우선 얼마나 커버가 되는지 알 수 있는 test:cov를 실행해 보자
npm run test:cov

잘 작동한다. (이렇게 안나올 수도 있다.)
이번에는 어떤 테스트 파일이 알 수 있는 test:watch를 실행해보자

watch를 실행할 경우 추가적인 명령어가 필요하다
여기서 a는 모든 테스트를 해보는 명령이다.
유닛 단위 테스트와 end to end (e2e) 테스트
유닛 테스트는 특정 부분만 테스트를 하는 것이고
e2e테스트는 모든 서비스를 테스트 하는 것이다
주요 키워드
테스트 파일에는 테스트 파일에만 사용하는 키워드가 있다.
describe: 테스트 내용 자체
beforeEach: 테스트하기 전에 먼저 실행되는 부분
it은 테스트 하는 부분이다.
사실 이렇게 설명해도 헷갈리니 직접 해보자
테스트 파일을 열고 아무 describe 안에 다음을 입력하자

여기서 왠 텍스트가 들어 있는것을 볼 수 있는데, 이건 테스트 이름이다.
때문에 본인이 원하는 텍스트를 넣어줘도 된다.
expect는 괄호안의 것이 무엇이 되어야 하는지를 말하고
toEqual은 괄호 안의 숫자가 나와야 한다는 뜻이다.
즉, 1 + 1 은 2가 되어야 한다는 뜻이다.
선술한 커맨드에 따라 테스트를 해보면 잘 돌아가는 것을 알 수 있다.

자, 만약 고의로 틀린다면 어떨까?
1+1 = 3 이라고 해보자

FAIL이라고 뜨는 것을 볼 수 있다.
코드를 잘 살펴보면 우리가 기대한 값은 3이었지만 실제 나온것이 2였다는 것을 알 수 있다
코드의 어느부분에 문제가 있는지까지 아주 상세하게 나오는 것을 알 수 있다.
CRUD 테스트
우리가 만든 CRUD를 테스트 하는 코드를 작성해 보자

서비스 파일에서 getAll기능을 테스트 해볼 것이다.
describe를 새로 만들고 이름을 지어주자, 보통 내가 뭘 테스트 하는지 알기 위해서 함수 이름을 똑같이 적는 경우가 많다.
그 다음 it에 테스트 이름을 넣어준다.
그런데 테스트를 하기 전에 먼저 이 파일을 가져와야 할 필요가 있다.

가져오는 코드, 명령어로 서비스 파일을 만들었다면 이건 기본적으로 있는 경우가 많다.
아무튼 이제 result는 서비스의 getAll() 함수로 하고
그렇게 받아온 함수가 배열인지를 확인하는 코드를 작성하자

아까 위에도 있었던 내용이지만 한 번 더 가져왔다.
result는 Array 타입이어야 한다는 내용의 코드
이번엔 getOne을 테스트 해보자

getOne은 좀 길다
첫번째 it을 살펴보면
service의 create 함수를 사용하는 것을 알 수 있다.
포스트를 생성할 때, body에 title과 genres와 year를 입력해주어야 했는데 바로 그것이라고 할 수 있다.
아무튼 그렇게 생성된 데이터를 다시 getOne에 1을 넣어서 가져오고
가져온 데이터가 정의되었는가에 대한 여부를 확인한다.
두번째 it을 살펴보면
이건 없는 데이터를 가져왔을 때를 위한 테스트다.
id가 999인 데이터는 아직 없다. 고로 try-catch문에서 에러가 발생해야 하는데 그렇게 발생한 에러가
NotFoundException 인스턴스가 되는지에 대한 테스트다.

테스트가 잘 되는 것을 볼 수 있다.

참고로, 에러메시지가 잘 나오는지도 확인할 수 있다.
'Framework > Nest.js' 카테고리의 다른 글
| Nest.js 공부정리 - 기본 - 서비스, CRUD, 유효성 검사 (1) | 2023.01.05 |
|---|---|
| Nest.js 공부정리 - 기본 - 라우터, 메소드, Param, Body, Query (0) | 2023.01.03 |
| Nest.js 공부정리 - 기본 - 코드 구조에 대한 이해 (0) | 2023.01.02 |
| Nest.js 공부정리 - 시작 (0) | 2023.01.02 |



















































