프린세스 다이어리

테스트코드 눈에 잘 들어오게 리팩토링하기 본문

FE

테스트코드 눈에 잘 들어오게 리팩토링하기

개발공주 2022. 1. 25. 22:26
728x90

테스트를 짜기는 했는데, 유사한 케이스가 너무 여러개인 경우에 대해 리팩토링을 진행했다.

 

안좋은 예시

테스트를 짰으니 테스트가 돌아가기는 하나, 테스트 케이스가 많아질 수록 코드 줄 수도 많아지고 뭘 적었는지 한눈에 보기 힘들다.

describe('formatPhoneNumber 테스트 - 9자리 이상', () => {
    it('지역번호', () => {
        const result = formatPhoneNumber('0212341234');
        expect(result).toBe('02-1234-1234');
    });

    it('지역번호 자릿수 미만', () => {
        const result = formatPhoneNumber('031123123');
        expect(result).toBe('031-12-3123');
    });

    it('지역번호 자릿수 초과', () => {
        const result = formatPhoneNumber('0311234123400');
        expect(result).toBe('031-1234-123400');
    });

    it('휴대폰번호', () => {
        const result = formatPhoneNumber('01011112222');
        expect(result).toBe('010-1111-2222');
    });

    it('휴대폰번호 자릿수 미만', () => {
        const result = formatPhoneNumber('011987634');
        expect(result).toBe('011-98-7634');
    });
    
    // ...
})

 

올바른 예시

어떤 주제로 어떤 테스트 케이스를 작성해야 하는지 내가 한눈에 알아보기 편하고, 협업하는 사람들끼리도 해당 함수가 어떤 상황에서 어떤 결과가 나올지 이미 알고 있는 상태에서 코드를 보기 때문에 코드 수정 시 매우 편리하다.

describe('formatPhoneNumber 테스트', () => {
    it('국가번호 있는 전화번호', () => {
        expect(formatPhoneNumber('82')).toBe('+82');
        expect(formatPhoneNumber('0821')).toBe('+82-1');
        expect(formatPhoneNumber('8210')).toBe('+82-10');
        expect(formatPhoneNumber('08210')).toBe('+82-10');
        expect(formatPhoneNumber('8221111')).toBe('+82-2-1111');
        expect(formatPhoneNumber('82315550000')).toBe('+82-31-555-0000');
        expect(formatPhoneNumber('82315550000222')).toBe('+82-31-5550-000222');
        expect(formatPhoneNumber('\0 82-2as;nbsp`15`-0022-22\n')).toBe(
            '+82-2-1500-2222',
        );
    });

    it('국가번호 없는 전화번호', () => {
        expect(formatPhoneNumber('02')).toBe('02');
        expect(formatPhoneNumber('021')).toBe('02-1');
        expect(formatPhoneNumber('02119')).toBe('02-119');
        expect(formatPhoneNumber('0255522')).toBe('02-5-5522');
        expect(formatPhoneNumber('025552222')).toBe('02-555-2222');
        expect(formatPhoneNumber('0215447200')).toBe('02-1544-7200');
        expect(formatPhoneNumber('02154472002222')).toBe('02-1544-72002222');
        expect(formatPhoneNumber('\0널 02-2as;nbsp`15`-0022-22\n')).toBe(
            '02-2-1500-2222',
        );
    });
    
    // ...
});

이 방법의 단점은 it으로 시작하는 코드를 한 그룹으로 보기 때문에 한 그룹에 테케 하나만 실패해도 그룹 전체가 실패한 것으로 나온다. 그러므로 적당히 몇개씩 주제별로 나눠서 작성하면 된다.

728x90
Comments