cleanUrl: /단위 테스트 시작하기

이번 글에서는 NestJS 애플리케이션에서 엔드투엔드(E2E) 테스트를 작성하는 방법을 알아본다.

앞서 단위 테스트에 대해 다뤄봤지만, 엔드투엔드 테스트는 애플리케이션의 서로 다른 부분들이 함께 잘 동작하는지 확인하는 데 중점을 둔다.

1. 엔드투엔드 테스트란?

엔드투엔드 테스트는 애플리케이션의 전반적인 동작을 확인하기 위해, 실제 서버 인스턴스를 생성하여 요청을 보내고 응답을 확인하는 테스트 방식이다. 단위 테스트가 특정 메서드의 동작을 검증하는 것과 달리, E2E 테스트는 애플리케이션의 다양한 컴포넌트가 유기적으로 잘 작동하는지를 확인한다.

E2E 테스트 구조

NestJS 프로젝트를 생성하면 루트 프로젝트 폴더에 자동으로 test 디렉터리가 생성된다.

이 폴더 안에는 기본적인 엔드투엔드 테스트 파일이 하나 들어있다. 파일 구조는 다음과 같다.

import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from 'src/app.moudle';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello World!');
  });
});

이 구조는 단위 테스트와 유사하지만, E2E 테스트는 애플리케이션 인스턴스를 전체로 띄워서 진행된다는 점이 다르다.