본문 바로가기
내일배움캠프/축구팀 관리 프로젝트

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

by 코드스니펫 2024. 2. 18.
반응형

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

 

테스트 커버리지 인증

 

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

 

match service 테스트 코드 작성중

 

구단주 경기 요청 테스트

 

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

 

it 조건들

 

각 테스트 조건별로 기대값을 충족하는 지 확인하는 방식으로 코드를 작성했습니다. 

 

 

[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);
        });
    });

 

이렇게 열 몇개의 메서드에 대한 테스트코드 만들고 중간 점검해보니 아직 반밖에 테스트 되지 않은 걸 알 수 있었습니다.

 

match.service.ts 테스트 결과

 

 

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

 

테스트 코드 수정해야 할 곳

 

 

Jest로 기본적인 테스트 작성하기

Engineering Blog by Dale Seo

www.daleseo.com

 

그 밖에 controller, module 파일도 작업해야겠습니다. 프로젝트 막판에 테스트 코드에 집중하는 중입니다.

 

match 테스트 커버리지 현황

 

▼ 이전 진행한 프로젝트들 ▼

 

 

축구팀 관리 프로젝트 36일차 - jwt 모의함수 구현 오류

축구팀 관리 프로젝트 36일차 - jwt 모의함수 구현 오류 테스트 코드 작성 중 발견한 jwt 모의함수 구현 오류를 어떻게 해결했는지 소개하겠습니다. jwt 모의함수 구현 오류 문제발견 문제는 아래

lemonlog.tistory.com

 

 

축구팀 관리 프로젝트 34일차 - 유저테스트 시작, 취업 준비

축구팀 관리 프로젝트 34일차 - 유저테스트 시작, 취업 준비 전날 준비하던 유저테스트를 드디어 시작했습니다. 배포 전까지 나오던 오류를 하나 둘 잡고 실제로 테스트를 받기 시작하니 기분이

lemonlog.tistory.com