2024. 2. 20. 19:11ㆍ카테고리 없음
목차
1. 학습 내용
01. 테스트코드
02. Jest를 사용한 테스트코드 작성
2. 내용 정리
01. 테스트 코드
1) 테스트 코드 : 작성한 코드에 문제가 없는지 확인하기 위해 작성하는 코드
코드가 멀쩡함을 보여주는게 아니라, 코드가 멀쩡하다면 나올 결과를 설정하고 검증하기 위한 것.
2) 테스트 코드 종류
단위 테스트 : 가장 작은 규모의 기능 테스트
통합 테스트 : 다양한 기능을 합쳤을때 생기는 문제 방지
E2E 테스트 : 백엔드부터 시작해서 최종적으로 웹 페이지까지 원하는대로 동작하며 원하는 데이터를 잘 보여주는지 확인
돌연변이 테스트(번외)
ex) 넷플릭스의 카오스 몽키 솔루션(카오스 엔지니어링)
3) Jest : 페북에서 개발한 테스팅 프레임워크
React와의 궁합 덕분에 가장 많이 사용되는 테스팅 프레임워크, 기본 지원하는 테스팅 프레임워크
-> 테스트 코드 표현이 다른 프레임워크보다 훨씬 간결하다!
4) Jest 설치
- 설치
yarn add -D jest
- package.json 수정
{
...
"main": "index.js",
...
}
이 부분에
{
"license": "MIT",
"type": "module",
"scripts": {
"test": "node --experimental-vm-modules node_modules/.bin/jest"
},
}
추가
-> jest를 yarn test로 실행 가능
3. 예제
02. Jest를 사용한 테스트코드 작성
test() : 단위 테스트를 묶어주는 함수
expect() : 정상적인지 확인하기 위한 표현식 작성 함
- 검증 함수 기반 코드 -
export const isEmail = (value) => {
return false;
};
아래의 조건을 만족하는 test 함수는
- 입력한 이메일 주소에는 "@" 문자가 1개만 있어야 이메일 형식이다.
- 입력한 이메일 주소에 공백(스페이스)이 존재하면 이메일 형식이 아니다.
- 입력한 이메일 주소 맨 앞에 하이픈(-)이 있으면 이메일 형식이 아니다.
import { isEmail } from './validation';
test('입력한 이메일 주소에는 "@" 문자가 1개만 있어야 이메일 형식이다.', () => {
expect(isEmail("my-email@domain.com")).toEqual(true); // 1개만 있는 상황
expect(isEmail("my-email@@@@domain.com")).toEqual(false); // 여러개 있는 상황
expect(isEmail("my-emaildomain.com")).toEqual(false); // 하나도 없는 상황
});
test("입력한 이메일 주소에 공백(스페이스)이 존재하면 이메일 형식이 아니다.", () => {
expect(isEmail("myemail@domain.com")).toEqual(true);
expect(isEmail("my email@domain.com")).toEqual(false);
});
test("입력한 이메일 주소 맨 앞에 하이픈(-)이 있으면 이메일 형식이 아니다.", () => {
expect(isEmail("e-m-a-i-l@domain.com")).toEqual(true);
expect(isEmail("-email@domain.com")).toEqual(false);
});
isEmail은 항상 false를 return한다.
위의 테스트 코드를 기반으로 isEmail을 디버깅한다면
export const isEmail = (value) => {
const email = (value || '');
if (email.split('@').length !== 2) {
return false;
} else if (email.includes(' ')) {
return false;
} else if (email[0] === '-') {
return false;
}
return true;
};
4. 생각 정리
실제 개발은 개발 - 테스트 - 수정 - 테스트 - 수정 순으로 진행하여 끊임없이 코드를 검증해야 한다.
(물론 제대로 지키진 못했다...)
이는 서비스가 복잡해질수록 더욱 중요해진다.