반응형
축구팀 관리 프로젝트 37일차 - 목표 테스트 커버리지 80% 중 56% 달성
현재 match service 단 테스트 파일 작성중입니다. 커버리지 80%를 목표로 하고 있는 데 아직 56%까지 작업했습니다.
match service 테스트 코드 작성중
기본적인 경기 관련 CRUD 테스트 코드 작성은 어렵지 않게 할 수 있었는데 위 같이 이메일 인증하는 메서드를 구현하는데 많은 시간이 걸렸습니다. 경기 생성시 상대팀 구단주에게 이메일로 경기 요청을 보내는 로직을 테스트 코드로 다시 점검하기 위해 작성하려 해서 그런듯 합니다.
각 테스트 조건별로 기대값을 충족하는 지 확인하는 방식으로 코드를 작성했습니다.
또한, 에러 케이스에 대한 테스트도 구현하였습니다.
describe('requestCreMatch - 경기 생성 이메일 요청(상대팀 구단주에게)', () => {
let createRequestDto;
beforeEach(async () => {
// 필요한 메서드의 모의 구현
jest.spyOn(service, 'verifyReservedMatch').mockResolvedValue(undefined);
jest.spyOn(service, 'verifyTeamCreator').mockResolvedValue([
{ name: '구단주 이름' } as any
] );
jest.spyOn(teamRepository, 'findOne').mockResolvedValue({
id: 1, // 예시로 사용된 팀 ID
name: 'Team Name', // 예시 팀 이름
creator: {
name: 'Away Team',
email: 'away@example.com'
},
// 기타 필요한 필드에 대한 모킹 값...
}as any);
// 메서드 호출 및 결과 검증
createRequestDto = {
date: '2024-02-25',
time: '18:00:00',
homeTeamId: 1,
awayTeamId: 2,
fieldId: 173,
};
});
it('성공적으로 요청을 처리해야 한다', async () => {
const userId = 1;
const result = await service.requestCreMatch(userId, createRequestDto);
expect(result).toBeTruthy();
});
it('올바른 매개변수로 emailService.reqMatchEmail을 호출해야 한다', async () => {
const userId = 1;
await service.requestCreMatch(userId, createRequestDto);
expect(emailService.reqMatchEmail).toHaveBeenCalledWith(expect.any(Object));
});
it('emailService.reqMatchEmail을 정확히 한 번 호출해야 한다', async () => {
const userId = 1;
await service.requestCreMatch(userId, createRequestDto);
expect(emailService.reqMatchEmail).toHaveBeenCalledTimes(1);
});
it('사용자를 위한 접근 이메일 토큰을 생성해야 한다', async () => {
const userId = 1;
await service.requestCreMatch(userId, createRequestDto);
expect(authService.generateAccessEmailToken).toHaveBeenCalledWith(userId);
});
// 추가적인 에러 케이스에 대한 테스트도 구현
it('경기 시간이 이미 예약되어 있다면 예외를 던져야 한다', async () => {
jest.spyOn(service, 'verifyReservedMatch').mockRejectedValue(new BadRequestException('이미 예약된 경기 일정 입니다.'));
const userId = 1;
await expect(service.requestCreMatch(userId, createRequestDto)).rejects.toThrow(BadRequestException);
});
});
이렇게 열 몇개의 메서드에 대한 테스트코드 만들고 중간 점검해보니 아직 반밖에 테스트 되지 않은 걸 알 수 있었습니다.
수정해야할 곳이 계속 나타나는 것 같습니다.
그 밖에 controller, module 파일도 작업해야겠습니다. 프로젝트 막판에 테스트 코드에 집중하는 중입니다.
▼ 이전 진행한 프로젝트들 ▼
'내일배움캠프 > 축구팀 관리 프로젝트' 카테고리의 다른 글
축구팀 관리 프로젝트 40일차 - 최종발표, 공부는 계속된다, 취업도 (1) | 2024.02.21 |
---|---|
축구팀 관리 프로젝트 38일차 - soft delete된 팀 멤버가 조회되는 오류 (0) | 2024.02.19 |
축구팀 관리 프로젝트 36일차 - jwt 모의함수 구현 오류 (1) | 2024.02.16 |
축구팀 관리 프로젝트 34일차 - 유저테스트 시작, 취업 준비 (0) | 2024.02.14 |
축구팀 관리 프로젝트 33일차 - 프로젝트 유저 테스트 준비 (0) | 2024.02.13 |