
일교차 때문인지 비염때문에 제정신이 아님... 오늘까지 과제 완성해야하는데 쓰레기같은 체력아 젭알 힘을 내...
🚩 JEST
- (테스트할 파일 이름).spec.js 파일 생성
- test(): 단위 테스트를 묶어주는 함수
- expect(): 특정 값이 정상적인지 확인하기 위한 표현식을 작성할 수 있게 하는 함수
test('입력한 이메일 주소에는 "@" 문자가 1개만 있어야 이메일 형식이다.', () => {
expect(isEmail('asdf@@@naver.com')).toEqual(false);
expect(isEmail('asdf@@@@naver.com')).toEqual(false);
expect(isEmail('asdf@@naver.com')).toEqual(false);
expect(isEmail('asdfnaver.com')).toEqual(false);
expect(isEmail('a.com')).toEqual(false); // false: 에러인 코드
expect(isEmail('asdf@naver.com')).toEqual(true); // 정상으로 나오는 코드
});
Jest config
- JEST는 jest.config.js 파일을 정의하거나 CLI 환경에서 추가 옵션을 설정하여 커버리지를 출력하거나, 실시간 모니터링 등 다양한 기능을 사용할 수 있음
Jest Script
- package.json의 script에 추가하는 부분
"test": "cross-env NODE_ENV=test NODE_OPTIONS=--experimental-vm-modules jest --forceExit",
"test:silent": "cross-env NODE_ENV=test NODE_OPTIONS=--experimental-vm-modules jest --silent --forceExit",
"test:coverage": "cross-env NODE_ENV=test NODE_OPTIONS=--experimental-vm-modules jest --coverage --forceExit",
"test:unit": "cross-env NODE_ENV=test NODE_OPTIONS=--experimental-vm-modules jest __tests__/unit --forceExit"
- cross-env: OS마다 다른 환경 변수 설정 방식을 통일해주는 모델
Jest CLI Options
- --forceExit
- 테스트 코드 검사가 완료되었을 때, 강제로 Jest를 종료함
- --silent
- 테스트 코드를 실행했을 때 console.log와 같은 메세지를 출력하지 않음
- --coverage
- 테스트 코드 검사가 완료된 후 현재 프로젝트의 테스트 코드 커버리지를 출력함
- --verbose
- 테스트 코드의 개별 테스트 결과(한줄한줄)를 표시함
✨ 자주 사용하는 Jest 문법
🛸 Mock Functions
- Mock: 특정 메서드나 함수를 Mocking하기 위해 사용
- 실제 데이터베이스에 접근, 사용하기 전에 임시로 테스트 코드를 원하는 부분만 실행하는 가짜 객체
- .toHaveBeenCalledTimes(number)
- .toHaveBeenCalledWith(arg1, arg2, ...)
- 어떤 인자를 이용해 Mock이 호출되었는지 검사함
🥨 expect 결과값 검증
- .mockReturnValue(value)
- .toBe(value)
- 입력받은 예상값과 결과값이 일치하는지 엄격하게 비교
- 객체 인스턴스를 비교하면 인스턴스 Id까지 비교함
- .toEqual(value)
- .toMatch(regexp | string)
- 입력받은 문자열이 결과값과 같은지 검증
- String 또는 정규표현식으로 검증 가능
- .toBeTruthy()
- .toBeInstanceOf(class)
- 입력받은 예상값과 class가 동일한 Instance인지 검증
- Error을 검증할 때 주로 사용
- toHaveProperty(keyPath, value?)
- 입력받은 객체의 key와 value가 일치하는지 검증
- toMatchObject(object)
- 입력받은 객체와 결과 객체가 일치하는지 검증
- 입력받은 객체에는 없지만 결과 객체에 있는 속성이 있다면 무시하고 일치 여부를 확인함
🥨 Global Jest 문법
- beforeAll(fn, timeout)
- 테스트 코드가 실행되기 전 최초로 수행
- DB의 데이터를 초기화하거나 전역 Mock을 초기화할 때 사용
- beforeEach(fn, timeout)
- 각 test()가 실행되기 전에 수행
- 테스트가 실행되기 전, 동일한 설정을 반복할 때 사용
- afterEach(fn, timeout)
- 각 test()가 완료된 이후에 수행
- 테스트코드가 완료된 이후 Mock 또는 변경된 전역 변수를 초기화할 때 사용
- afterAll(fn, timeout)
- 모든 test()가 완료된 이후에 수행
- 테스트가 완료된 이후 DB에 변경된 데이터를 삭제하거나 Mock을 초기화하기 위해 사용