[TIL] jest와 supertest 모듈을 이용한 테스트 코드 구현하기

김시원·2023년 4월 28일
0

TIL

목록 보기
14/50

테스트가 필요한 이유

  • 제품의 안정성을 높인다.
  • 기능 추가 및 수정으로 인한 부작용(Side-effect)를 줄일 수 있다.
  • 불안감 없이 코드 작성을 할 수 있도록 도와준다.
  • 결과적으로 생산성을 매우 높여 준다.
  • 디버깅을 쉽게 해준다.
  • 개발 과정에서 반복적인 작업들을 하지 않도록 도와준다
  • 더 깔끔하고 재사용성이 좋은 코드 작성을 가능하게 해준다.

테스트 코드 종류

  • Unit Test - 작은 규모 (클래스 또는 메소드 수준)의 기능 테스트
  • Integration Test - 여러가지 기능을 합쳤을 때 생길 수 있는 문제 (외부 라이브러리까지 묶어서 검증, DB 접근, 전체 코드 등등) 테스트
  • Acceptance Test - 사용자의 스토리 (시나리오)에 맞춰 수행하는 테스트 (비지니스적인 관점)
  • E2E (End-to-end) Test: 테스트하고자 하는 기능에서 필요로 하는 모든 컴포넌트들이 올바르게 협업해서 최종적으로 원하는 결과를 내는지 확인하는 테스트 (기술적인 관점)

Layered Architecture에서의 테스트 코드

  • Mock Functions: 특정 methods를 mocking하기 위해 사용됌. 즉, 테스트에서 시간 또는 비용이 많이 들거나 의존성이 있는 코드를 실제로 실행하지 않고 호출 여부, 입력한 값의 일치 여부와 같은 정보를 확인하기 위해 사용되는 가짜 객체
  • DI (Dependency Injection): 객체들간의 의존성을 사용하려는 객체로 전달하려는 것을 의미. 즉, 하나의 객체가 다른 객체에게 의존성을 제공하는 방법. => Mock functions를 이용한 Mocking을 수행할 수 있도록 도와줌
    * Constructor Injection: DI를 구현하기 위한 방법 중 하나. 객체의 생성자를 호출할 때, 의존성을 전달하여 해당하는 객체는 전달받은 의존성을 이용해 코드를 실행함.
  • Unit Test
    • jest: layer별 테스트
      • Repository layer test
      • Service layer test
      • Controller layer test
  • Integration Test
    • Supertest + jest: API별 Request & Response 테스트

0개의 댓글