[내일배움캠프] TIL_221228

JungHoon Han·2022년 12월 28일
0

내일배움캠프

목록 보기
41/78

JEST (Test Code, Testing Framework)

기본적인 사용법

  • test() : 단위 테스트를 묶어주는 함수
  • expect() : 특정 값이 정상적인지 확인하기 위한 표현식을 작성할 수 있게 해주는 함수

Jest CLI Option

npm install jest -D
npm install jest supertest -D
// package.json

{
  ...

  "scripts": {
    ...

    "test": "NODE_ENV=test jest --forceExit",
    "test:silent": "NODE_ENV=test jest --silent --forceExit",
    "test:coverage": "NODE_ENV=test jest --coverage --forceExit",
    "test:unit": "NODE_ENV=test jest __tests__/unit --forceExit",
    "test:integration": "NODE_ENV=test jest __tests__/integration --forceExit"
  },
  • --forceExit : 테스트 코드 검사가 완료되었을 때 강제로 Jest 종료. express의 app 객체와 시퀄라이즈 연결이 connect 상태로 남아있어 테스트 코드가 종료되지 않을 때 사용

  • --silent : 테스트 코드를 실행했을 때, console.log 와 같은 메시지를 출력하지 않음

  • --coverage : 테스트 코드 검사가 완료된 후 현재 프로젝트의 테스트 코드 커버리지를 출력해줌.

  • --verbose : 테스트 코드의 개별 테스트 결과를 표시

Jest CLI Option 자세히 보기

자주 쓰는 Jest 문법

  • .toBe(value) : 입력받은 결과값과 동일한지 엄격하게 비교(toEqual보다 엄격하게)
  • .toEqual(value) : 입력받은 결과값과 동일한지 비교
  • .toMatch(regexp | string) : 입력받은 결과값과 문자열이 같은지 검증, string 또는 정규표현식으로 검증할 수 있음
  • .toBeTruthy() : 결과값이 true인지 검증
  • .toBeInstanceOf(Class) : 입력받은 값과 클래스가 동일한 인스턴스인지 검증. 에러를 검증할 때 주로 사용
  • .toHaveProperty(keyPath, value?) : 입력받은 객체의 키와 밸루가 일치하는지 검증
  • .toMatchObject(object) : 결과값의 객체와 입력받은 객체가 일치하는지 검증. 만약 입력받은 객체에서 없는 속성이 있더라도 일치하게끔 연결

Global Jest 문법

  • afterAll(fn, timeout) : 모든 test()가 완료된 이후에 수행. 테스트가 완료된 이후 데이터베이스에 변경된 데이터를 삭제하거나 Mock을 초기화 하기 위해 사용

  • afterEach(fn, timeout) : test()가 완료된 이후에 수행. 테스트코드가 완료된 이후 Mock또는 변경된 전역 변수를 초기화 할 때 사용

  • beforeAll(fn, Timeout) : 테스트코드가 실행되기 전 가장 처음 수행. 데이터베이스의 데이터를 초기화하거나 전역 Mock를 초기화할 때 사용

  • beforeEach(fn, timeout) : test()가 실행되기 전에 수행. 테스트가 실행되기 전, 동일한 설정을 반복해야 할 때 사용

  • 순서 : beforeAll -> beforeEach -> afterEach -> afterAll
    Global Jest 자세히보기

자주 사용하는 Mock expect 문법

  • toHaveBeenCalledTimes(number) : Mock이 몇번 호출되었는지 검증
  • toHaveBeenCalledWith(arg1, arg2, ...) : 어떤 인자를 이용해 Mock이 호출되었는지 검사

Jest Mock Function 자세히 보기

profile
Node.js 주니어 개발자

0개의 댓글