[NestJS] End-to-end 테스트

End-to-end 테스트

개별 모듈과 클래스에 중점을 두는 Unit 테스트와 달리 end-to-end(e2e) 테스트는 보다 종합적인 수준에서 클래스와 모듈의 상호 작용을 다룹니다.

애플리케이션이 성장함에 따라 각 API endpoint의 E2E 동작을 수동으로 테스트하기가 어려워집니다. 자동화된 E2E 테스트는 시스템의 전반적인 동작이 정확하고 프로젝트 요구 사항을 충족하는지 확인하는 데 도움이 됩니다.

Nest를 사용하면 SuperTest 라이브러리를 사용하여 HTTP request를 쉽게 시뮬레이션할 수 있습니다. SuperTest는 superagent를 기반으로 하는 HTTP 검증 라이브러리입니다.

request()

SuperTest 의 request(app.getHttpServer()) 함수를 사용하여 HTTP 테스트를 시뮬레이션합니다.

1
2
3
4
// localhost:3000/ 으로 라우팅될 때 Hello World!가 출력되는지 확인
it('/ (GET)', () => {
return request(app.getHttpServer()).get('/').expect(200).expect('Hello World!');
});

이러한 HTTP request 가 실행 중인 Nest 앱으로 라우팅 되기를 원하므로 request() 함수에 Nest 의 기반이 되는 HTTP 리스너에 대한 참조를 전달합니다.

사용 예시

기본적인 CRUD (Create/Read/Update/Delete) 에 대한 테스트를 하기 위해 다음과 같이 작성할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
describe('/users', () => {
it('GET', () => {
return request(app.getHttpServer()).get('/users').expect(200).expect([]);
});

it('POST', () => {
return request(app.getHttpServer())
.post('/users')
.send({
name: 'hgko',
age: 30,
hobbies: ['soccer'],
})
.expect(201);
});

it('PATCH', () => {
return request(app.getHttpServer())
.patch('/users/1')
.send({
age: 35,
})
.expect(200);
});

it('DELETE', () => {
return request(app.getHttpServer()).delete('/users/1').expect(200);
});
});

참고

Share