Nest. 테스트

cm·2024년 1월 11일

Nest

목록 보기
1/7

Nest. 테스트

  • NestJS는 기본적으로 Jest를 기본 테스트 프레임워크로 채택하고 있다.

1. 테스트 유형

1-1. TDD (Test-Driven-Development)

  • 함수를 테스트한다. 단위테스트.
  • 코드의 기능을 테스트 중심으로 개발하는 방법론
    [ex] gethello(), getId()가 올바르게 작동하는지 테스트

1-2. BDD (Behavior-Driven-Development) 🔥

  • 사용자 행위를 테스트한다.
  • 사용자의 행위와 시스템의 동작을 중심으로 테스트틑 작성하는 방법론
  • e2e 테스트(end to end) : 브라우저와 서버간 테스트. (특정 기능이 너무 느리면 각각 분리해서 다시 테스트한다.)
    [ex] 로그인 기능이 올바르게 작동하는지 테스트

1-3. DDD (Domain-Driven-Development)

  • 도메인을 중심으로 개발하며 도메인 모델을 검증하는 테스트를 중요시하는 방법론
    [ex] 도메인 모델이 기대대로 동작하는지를 테스트

2. 테스트 함수

2-1. 라이프사이클 함수

beforeAll

  • 테스트 그룹 전체에서 1번 실행되는 함수.
  • 테스트 전체에 필요한 설정이나 초기화를 수행하는데 사용된다.

afterAll

  • 테스트 그룹 전체에서 1번 실행되는 함수.
  • 테스트 전체가 끝난 후 정리작업을 수행하는데 사용된다.

beforeEach

  • 각 테스트케이스가 실행되기 전에 호출되는 함수.
  • 각 테스트에 필요한 초기화 작업을 수행하는데 사용된다.

afterEach

  • 각 테스트케이스가 실행된 후에 호출되는 함수.
  • 각 테스트 이후 정리작업을 수행하는데 사용된다.

2-2. it

  • 하나의 테스트 케이스를 정의한다.
it('something', () => {
  // 테스트 케이스 내용
});

2-3. describe

  • 여러 테스트 케이스를 그룹화하고 설명하는데 사용된다.
describe('Math operations', () => {
  it('should add two numbers', () => {
    // 테스트 내용
  });

  it('should subtract two numbers', () => {
    // 테스트 내용
  });
});

2-4. Expect

  • 테스트 결과를 평가하는데 사용하는 함수. 특정 값이나 함수의 반환값을 예상값과 비교하여 테스트를 판단한다.
it('should add two numbers correctly', () => {
  expect(sum(1, 2)).toBe(3);
});

2-5. Matchers

toBe()

  • 정확한 값과 일치하는지를 확인하는 함수.

toEqual()

  • 객체 또는 배열의 내용이 일치하는지를 확인하는 함수.

not.toBe()

  • 값이 일치하지 않아야 성공하는 테스트를 작성할 때 사용하는 함수.

toContain()

  • 배열이 특정요소를 포함하는지 확인하는 함수.
it('should check if two arrays are equal', () => {
  expect([1, 2, 3]).toEqual([1, 2, 3]);
});

it('should check if array contains a specific element', () => {
  expect([1, 2, 3]).toContain(2);
});

3. coverage

  • 코드의 얼마나 많은 부분이 테스트되었는지를 나타내는 지표. 일반적으로 백분율로 표시된다.
  • 명령어 : yarn test:cov
    • 만약, Jest로 확인하고 싶으면 package.json에"test:cov" : "jest --coverage"가 추가되어야 한다.
    • 명령어 실행후, coverage 폴더가 생성되는데 입사하면 그 밑의 index.html 파일을 상사에게 보고하는 경우가 있다.
  • 라인 커버리지 : 테스트가 통과하거나 실패한 라인의 수 🔥
  • 함수 커버리지 : 소스코드의 각 함수 중 테스트된 함수의 백분율
  • 브랜치 커버리지 : 소스코드의 각 분기중 테스트된 분기의 백분율

4. 명령어 및 폴더구조

4-1. 명령어

  • yarn test : 일반적으로 프로젝트의 테스트 스크립트를 실행하는 명령어.
    • 실행 스크립트 :package.json 파일의 scripts 섹션에 정의된 test 스크립트를 실행한다. 프로젝트 설정에 따라 다양한 테스트 프레임워크나 런너 사용가능하다. (아래의 사진에서는 test가 jest로 되어있기 때문에 yarn test는 yarn jest와 동일함)
    • --watch 플래그: 파일 변경사항 감지하여 테스트를 자동으로 다시 실행 가능하다.

  • yarn test:e2e : e2e 테스트를 실행한다.
  • yarn test:cov : 코드 커버리지를 측정하고 보고한다.
  • yarn jest : 직접적으로 Jest를 실행한다. jest.config.js 파일에 설정된 구성이 사용된다.

4-2. 폴더 구조

  • src/app.controller.spec.ts : 단위테스트(TDD)를 위한 파일
    → 실행 명령어 :yarn test or yarn jest
  • test/app.e2e-spec.ts : e2e테스트(BDD)를 위한 파일
    → 실행 명령어 : yarn test:e2e
  • test/jest-e2e.json : Jest e2e테스트 설정파일

    jest-e2e.json

    {
      "moduleFileExtensions": ["js", "json", "ts"],
      "rootDir": ".",
      "testEnvironment": "node",
      "testRegex": ".e2e-spec.ts$",
      "transform": {
        "^.+\\.(t|j)s$": "ts-jest"
      }
    }
    • moduleFileExtensions: 테스트 파일에서 모듈로 사용할 수 있는 확장자들의 배열을 정의
    • rootDir: Jest가 테스트 파일 및 구성 파일을 찾기 시작하는 기본 디렉토리를 지정
    • testEnvironment: 테스트가 실행될 환경을 지정 [ex] node, browser
    • testRegex: Jest가 실행할 테스트 파일을 선택하는 데 사용되는 정규식을 지정 (여기서는 .e2e-spec.ts로 끝나는 파일들을 선택하도록 설정)
    • transform: Jest가 특정 유형의 파일을 변환하는 방법을 지정
profile
나를 위한 기록

0개의 댓글