- 유닛 테스트: 모든 function을 하나씩 테스트하는 것
- e2e 테스트: 이페이지로 가면 특정페이지가 나와야하는 경우 (사용자 관점)
getAll, getOne, deleteOne 등 만들었던 함수들 유닛 테스트하기
Jest가 spec.ts 를 찾을 수 있도록 돼있다. 테스팅하고 싶은 파일명에 spec.ts를 붙이면 된다.
spec.ts 에 예시 추가
it('should be 4', () => {
expect(2+2).toEqual(4);
})
movie.service.spec.ts 에 유닛테스트 만들기
get
describe('getAll', () => {
it('should return an array', () => {
const result = service.getAll();
// 배열로 리턴하는지 체크
expect(result).toBeInstanceOf(Array);
});
});
describe('getOne', () => {
it('should return a movie', () => {
service.create({
title: 'Test Movie',
genres: ['test'],
year: 2000,
});
const result = service.getOne(1);
expect(result).toBeDefined();
expect(result.id).toEqual(1);
});
it('should throw 404', () => {
try {
service.getOne(999);
} catch(e) {
expect(e).toBeInstanceOf(NotFoundException);
expect(e.message).toEqual('Movie with Id 999 not found.');
}
});
});
delete
describe('deleteOne', () => {
it('deletes a movie', () => {
service.create({
title: 'Test Movie',
genres: ['test'],
year: 2000,
});
const beforeDelete = service.getAll().length;
service.deleteOne(1)
const afterDelete = service.getAll().length;
expect(afterDelete).toBeLessThen(beforeDelete);
});
it('should throw 404', () => {
try {
service.deleteOne(999);
} catch(e) {
expect(e).toBeInstanceOf(NotFoundException);
}
});
});
create
describe('create', () => {
it('should create a movie', () => {
const beforeCreate = service.getAll().length;
service.create({
title: 'Test Movie',
genres: ['test'],
year: 2000,
});
const afterCreate = service.getAll().length;
expect(afterCreate).toBeGreaterThen(beforeCreate);
});
});
update
describe('update', () => {
it('should update a movie', () => {
service.create({
title: 'Test Movie',
genres: ['test'],
year: 2000,
});
service.update(1, { title: 'Updated Test' });
const result = service.getOne(1);
expect(result.title).toEqual('Updated Test');
});
it('should throw 404', () => {
try {
service.update(999, {});
} catch(e) {
expect(e).toBeInstanceOf(NotFoundException);
}
});
});
테스트 코드는 describe와 it 구문으로 구성된다.
- describe : 테스트 스위트를 작성하는 블록
- it : 특정 테스트 시나리오를 작성하는 부분
BDD 스타일: Given / when / then
- SetUp : 모든 테스트 케이스 수행 전 수행해야하는 조건
- TearDown : 테스트 후에 후처리
해당 테스트 개념을 위해 Jest에서는 beforeAll(), beforeEach(), afterAll(), afterEach() 를 제공한다.
테스트 커버리지 측정이 가능하다.
이 결과를 이용해서 CI/CD 과정에 포함하여 기준이 만족되지 못하면 릴리즈를 하지 못하도록 할 수 있다.
루트 디렉터리아래에 coverage 디렉터리가 생기고 저장된다.
npm run test:cov
watch로 감시하면 테스트 파일 수정될때마다 테스트 실행된다.
npm run test:watch
728x90
반응형
'개발공부 > NestJS' 카테고리의 다른 글
[노마드 코더 NestJS로 API 만들기] 3 Testing E2E (0) | 2023.08.20 |
---|---|
[NestJs] Modules, Injection (0) | 2023.08.16 |
[노마드 코더 NestJS로 API 만들기] 2 DTO, Validation (0) | 2023.08.13 |
[노마드 코더 NestJS로 API 만들기] 2 service (0) | 2023.08.12 |
2 Rest API - Controller, Route [노마드 코더 NestJS로 API 만들기] (0) | 2023.08.12 |
댓글