Notice
Recent Posts
Recent Comments
Link
상똥이의 Back-End 공부방
[Jest] DTO 테스트코드 작성 본문
1. describe
- dto 테스트 시, 여러 개의 dto가 존재할 수 있는데 각각의 dto에 대해 다양한 테스트를 진행하는 경우 describe로 구분한다
- dto가 아래와 같은 경우
export class CreateDto { ... }
export class UpdateDto { ... }
- 테스트 코드는 아래와 같이 작성한다
describe('CreateDto', () => {
test('성공하는 케이스', () => {})
test('실패하는 케이스', () => {})
...
});
describe('UpdateDto', () => {
test('성공하는 케이스', () => {})
test('실패하는 케이스', () => {})
...
});
2. 테스트를 위한 임시 dto를 생성
- 실제 dto 형식 (경기 모집글을 작성하기 위한 dto)
export class CreateDto {
@IsString()
@MinLength(5, { message: ErrorCodes.INVALID_TITLE.message })
title: string;
@IsString()
@MinLength(10, { message: ErrorCodes.INVALID_CONTENT.message })
content: string;
@IsEnum(Gender, { message: ErrorCodes.CHOOSE_GENDER.message })
gender: Gender;
...
}
- 테스트를 위한 임시 dto를 테스트코드 내에 생성
describe('CreateDto', () => {
let dto: CreateDto;
beforeEach(() => {
dto = plainToInstance(CreateDto, {
title: '제목입니다.',
content: '내용입니다.',
gender: 'both',
...
});
});
}
※ beforeEach와 beforeAll
- beforeAll : describe 블록이 실행되기 전에 단 한 번만 실행됨 / 모든 테스트 케이스들이 공유할 수 있는 초기 설정을 준비할 때 사용
- beforeEach : 각 테스트 케이스들이 실행될 때마다 실행됨 / 각 테스트가 서로에게 영향을 주지 않고 독립적으로 실행될 수 있도록 함
3. 테스트코드
1) 성공하는 케이스
- beforEach로 임시 dto를 생성하였으므로 이 임시 dto를 바탕으로 성공하는 케이스를 작성한다.
- 유효성 검사를 실시하기 위해 validate 메서드를 사용한다.
test('게시글 작성시 DTO 검증이 성공적으로 수행되어야 함', async () => {
const validationErrors = await validate(dto);
expect(validationErrors).toHaveLength(0);
});
2) 실패하는 케이스
- 임시로 생성한 dto는 유효성 검사에 문제가 없으므로, 일부분을 바꾸어 문제가 발생하게끔 설정한다.
test('게시글 작성이 실패해야 함 - 성별 유효성 검사 실패', async () => {
dto.gender = 'rainbow' as Gender;
const validationErrors = await validate(dto);
expect(validationErrors[0].constraints).toHaveProperty('isEnum');
});
'Jest' 카테고리의 다른 글
[Jest] 테스트코드 환경 설정, prisma mocking (0) | 2024.05.04 |
---|