jest - e2e test

e2e 테스트를 도입해보자.

서버는 내가 띄우고 있는 것은 아니어서 그냥 따로 test 를 만들어서 진행하려고 한다.

 

E2E test

  • 목적 : 실제 app의 흐름을 사용자 관점에서 전체적으로 검증
  • 대상 : app 의 엔드포인트, UI 등 
  • 특징 :
    • 보통 애플리케이션 전체를 실행한 상태에서 테스트 
    • 외부 환경(DB, 네트워크 등) 과 상호작용을 포함 
    • 주로 요청/응답 흐름을 검증(예 : supertest 와 같은 라이브러리 사용)
    • 테스트 시간과 복잡도가 상대적으로 높음 

단위 테스트 Unit test

  • 목적 : 개별 모듈, 함수, 클래스의 동작을 검증
  • 대상 : 특정 로직, 메서드, 컴포넌트
  • 특징 : 
    • 독립적으로 동작하도록 외부 의존성을 Mocking 
    • 주로 jest 의 내장 기능 (expect, mock, spy0n) 을 사용

 

차이점  

  단위 테스트  E2E 테스트
대상 개별 모듈/함수를 중심으로 테스트  애플리케이션의 엔드포인트 (API/전체 흐름) 테스트 
실행 환경  Mock 환경에서 독립적으로 동작 실제 애플리케이션 실행 후 요청을 주고받는 환경 필요
테트스 위치  단위 테스트 파일 ( 주로 *.spec.ts , src 내부에 위치) E2E 테스트 파일 (주로 *.e2e-spec.ts , test 디렉토리에 위치) 

 

Jest 에서 E2E 와 다른 테스트를 어떻게 구분할까?

Jest 는 testRegex 나 testMatch를 통해 어떤 파일이 테스트인지 구분한다. 

 

  • 단위 테스트:
{
  "testRegex": ".*\\.spec\\.ts$",
  "rootDir": "src"
}

 

 

  • E2E 테스트 : 
{
  "testRegex": ".*\\.e2e-spec\\.ts$",
  "rootDir": "test"
}

 

 

Jest 에서 두 테스트를 실행하는 방법

단위 테스트

  • package.json에 아래 스크립트 추가:
"scripts": {
  "test": "jest"
}

 

 

E2E 테스트

  • package.json에 E2E 스크립트 추가
"scripts": {
  "test:e2e": "jest --config jest-e2e.json"
}

 

 

 

Jest의 기본 동작

Jest는 기본적으로 test 폴더 및 그 하위 폴더에 있는 .spec.ts 또는 .test.ts 파일을 인식한다.

따라서 새로운 폴더를 추가하고 그 안에 테스트 파일을 넣으면, 별다른 설정 없이도 Jest는 해당 파일을 자동으로 찾아 실행할 수 있다.

 

예를 들어:

- test
  - app.e2e-spec.ts
  - new-folder
    - new-test.spec.ts

위 구조처럼 new folder 를 추가하고 그 안에 new-test.spec.ts파일을 작성하면, Jest 는 기본적으로 이 파일을 찾아 테스트를 실행한다. 

 

 

pakcage.json 에서 jest 필드 사용 

  • 설정 위치 : package.json 의 jest 필드에 직접 설정을 정의한다. 
  • 적용 대상 : Jest 가 실행될 때 별도 설정 파일이 지정되지 않으면 이 설정이 기본으로 사용
  • 루트 변경 효과 : 
    • rootDir : "tset" 로 설정하면 test 디렉토리를 기준으로 테스트 파일을 탐색한다.
    • testRegex 와 결합하여 test 디렉토리 내부의 파일만 검색하게 된다.
  • 특징 : 
    • jest 필드는 프로젝트 전반에서 Jest 설정을 관리하기 쉽지만, e2e 테스트처럼 특정 환경을 위한 별도 설정이 필요하면 유연성이 부족할 수 있다.

jest-e2e.json 사용

  • 설정 위치 : 별도 설정 파일 (jest-e2e.json) 에 정의
  • 적용 방법 : Jest 실행 시 --config 옵션으로 해당 설정 파일을 명시적으로 지정해야 한다.
jest --config jest-e2e.json

 

  • 루트 변경 효과
    • jest-e2e.json 에 rootDir을 정의하면, 해당 설정 파일이 적용된 테스트 환경에서만 루트를 변경한다.
    • 예를 들어, rootDir : "test" 로 설정하면 e2e 테스트 실행 시에만 test 디렉토리를 기준으로 동작한다. 
  • 특징 : 
    • e2e 테스트나 유닛 테스트 처럼 서로 다른 테스트 환경에 대해 별도의 설정을 적용할 수 있다.
    • 다른 테스트 환경에 영향을 주지 않으므로 더 유연하다. 

 

Jest의 파일 탐색 방식 

1. 기준 디렉토리 rootDir 

  • Jest 는 설정된 rootDir 을 기준으로 파일을 탐색한다. 
  • 기본값은 process.cwd() (현재 작업 디렉토리) 이며, 명시적으로 설정되지 않으면 프로젝트의 루트 디렉토리가 된다

2. 테스트 파일 매칭 

  • testRegex : 파일 이름이 정규식과 일치하면 테스트 파일로 간주한다 
  • testMatch : 특정 경로 패턴에 맞는 파일을 지정한다. 

3. 무시되는 파일 

  • testPathIgnorePatterns : 지정된 패턴과 일치하는 경로의 파일을 테스트에서 제외
  • 기본적으로 node_modules 디렉토리는 제외된다.