TIL 39일차 (20240220)

박세연·2024년 2월 20일

TIL

목록 보기
33/70


일교차 때문인지 비염때문에 제정신이 아님... 오늘까지 과제 완성해야하는데 쓰레기같은 체력아 젭알 힘을 내...

🚩 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)
    • Mock이 몇번 호출되었는지 검증
  • .toHaveBeenCalledWith(arg1, arg2, ...)
    • 어떤 인자를 이용해 Mock이 호출되었는지 검사함

🥨 expect 결과값 검증

  • .mockReturnValue(value)
    • Mock 함수의 반환값을 지정
  • .toBe(value)
    • 입력받은 예상값과 결과값이 일치하는지 엄격하게 비교
    • 객체 인스턴스를 비교하면 인스턴스 Id까지 비교함
  • .toEqual(value)
    • 입력받은 예상값과 결과값이 일치하는지 비교
  • .toMatch(regexp | string)
    • 입력받은 문자열이 결과값과 같은지 검증
    • String 또는 정규표현식으로 검증 가능
  • .toBeTruthy()
    • 결과값이 true인지 검증
  • .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을 초기화하기 위해 사용
profile
배워나가는 중

0개의 댓글