Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 릿코드
- RT scheduling
- vue3
- 자료구조
- 해시테이블
- 스택
- alexnet
- pytorch
- 알고리즘
- 연결 리스트
- cors
- 타입스크립트
- 프론트엔드
- RxJS
- 큐
- 브라우저
- Machine Learning
- 컨테이너
- 자바스크립트
- 이진탐색
- 배열
- 프로그래머스
- C
- 웹팩
- 포인터
- 프로세스
- GraphQL
- APOLLO
- 연결리스트
- 코딩테스트
Archives
- Today
- Total
프린세스 다이어리
테스트코드 눈에 잘 들어오게 리팩토링하기 본문
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
'FE' 카테고리의 다른 글
[Storybook] 스토리북에서 vue svg파일 import 하는법 (0) | 2022.01.27 |
---|---|
센트리에 서버에러 제외하고 클라이언트 에러만 로그 보내는 법 (0) | 2022.01.26 |
자바스크립트 전화번호/휴대폰번호 정규표현식, 의미 설명 (0) | 2022.01.24 |
[Vue3] [Vue warn]: Invalid vnode type when creating vnode 해결방법 (0) | 2022.01.05 |
[Vue3] property 'reduce' does not exist on type ~ 해결방법 (0) | 2022.01.04 |
Comments