유닛테스트는 컴퓨터 프로그래밍에서 소스코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차.
이를 통해 언제든 코드 변경으로 인해 문제가 발생할 경우, 문제원인을 빠르게 파악하고 바로 잡을 수 있게 한다.
F.I.R.S.T 단위 테스트 원칙이 있으며 아래와 같다.
따라서 유닛테스트를 진행할때는 실제DB를 이용하지 않고 mocking해 진행하도록 한다.
Nestjs 상에서는 jest를 이용해 테스트가 진행되는데 nestjs공식문서와 jest사용법을 공부하여 구현한 과정을 적어보고자 한다.
유닛테스트를 진행하기 위해서는 보통 데이터베이스의 연결을 피한다. 테스트케이스가 독립적이여야 하고 테스트의 속도가 빨라야 하기 때문이다. 하지만 classes가 repository에 의존되어 있을 수 있기 때문에 이를 해결하기 위한 방법으로는 mock repositories 가 있다. mockRepository의 사용을 위해서 우리는 custom providers를 설정해야 한다.
@Module({
providers: [
UsersService,
{
provide: getRepositoryToken(User),
useValue: mockRepository,
},
],})
export class UsersModule {}
이렇게 작성하면 mockRepository는 userRepository처럼 사용될 것이다. 어디서든지 @InjectRepository decorator를 이용하여 userRepository를 요청한다면 Nest는 mockRepository를 사용할 것이다.
from nestjs공식문서
https://docs.nestjs.com/techniques/database#testing
E2E테스트는 실제로 유저가 사용한다는 것을 감안해 실제 사용흐름을 생각하여 짜야한다.
예를 들어 회원가입 -> 로그인 -> 마이페이지 -> 내정보수정 -> 로그아웃
둘 다 처음해보는 것이라 처음에 많이 버벅대고 특히 mocking이라는 개념이 참 어려웠는데 지금은 뭔지 좀 알 것 같다.