축구팀 관리 프로젝트 37일차 - 목표 테스트 커버리지 80% 중 56% 달성

현재 match service 단 테스트 파일 작성중입니다. 커버리지 80%를 목표로 하고 있는 데 아직 56%까지 작업했습니다.
match service 테스트 코드 작성중

기본적인 경기 관련 CRUD 테스트 코드 작성은 어렵지 않게 할 수 있었는데 위 같이 이메일 인증하는 메서드를 구현하는데 많은 시간이 걸렸습니다. 경기 생성시 상대팀 구단주에게 이메일로 경기 요청을 보내는 로직을 테스트 코드로 다시 점검하기 위해 작성하려 해서 그런듯 합니다.

각 테스트 조건별로 기대값을 충족하는 지 확인하는 방식으로 코드를 작성했습니다.
[JEST] 📚 테스트 커버리지 (Test Coverage)
테스트 커버리지 테스트 커버리지 (test coverage) 란, 전체 코드 중 어떤 부분이 테스트 되고 어떤 부분이 테스트 되지 않았는지를 비율을 알려주는 기능이다. package.json에 커맨드로 coverage 를 다음
inpa.tistory.com
[JEST] 📚 모킹 Mocking 정리 - jest.fn / jest.mock /jest.spyOn
Mocking 원리 mocking이란 (mock = 모조품) 뜻 그대로 받아드리면 된다. 즉 테스트하고자 하는 코드가 의존하는 function이나 class에 대해 모조품을 만들어 '일단' 돌아가게 하는 것이다. 한마디로, 단위
inpa.tistory.com
또한, 에러 케이스에 대한 테스트도 구현하였습니다.

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);
});
});
이렇게 열 몇개의 메서드에 대한 테스트코드 만들고 중간 점검해보니 아직 반밖에 테스트 되지 않은 걸 알 수 있었습니다.

수정해야할 곳이 계속 나타나는 것 같습니다.

Jest로 기본적인 테스트 작성하기
Engineering Blog by Dale Seo
www.daleseo.com
그 밖에 controller, module 파일도 작업해야겠습니다. 프로젝트 막판에 테스트 코드에 집중하는 중입니다.

▼ 이전 진행한 프로젝트들 ▼
축구팀 관리 프로젝트 36일차 - jwt 모의함수 구현 오류
축구팀 관리 프로젝트 36일차 - jwt 모의함수 구현 오류 테스트 코드 작성 중 발견한 jwt 모의함수 구현 오류를 어떻게 해결했는지 소개하겠습니다. jwt 모의함수 구현 오류 문제발견 문제는 아래
lemonlog.tistory.com
축구팀 관리 프로젝트 34일차 - 유저테스트 시작, 취업 준비
축구팀 관리 프로젝트 34일차 - 유저테스트 시작, 취업 준비 전날 준비하던 유저테스트를 드디어 시작했습니다. 배포 전까지 나오던 오류를 하나 둘 잡고 실제로 테스트를 받기 시작하니 기분이
lemonlog.tistory.com
'내일배움캠프 > 축구팀 관리 프로젝트' 카테고리의 다른 글
축구팀 관리 프로젝트 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 |