프로그래밍/Nest.js

Nest.js에서 Jest를 이용한 테스트 환경 설정 가이드

shimdh 2025. 3. 19. 16:49
728x90

Nest.js 애플리케이션의 품질을 보장하고, 코드 변경 시 발생할 수 있는 오류를 사전에 방지하기 위해 테스트는 필수적입니다. Jest는 JavaScript 및 TypeScript 프로젝트에 적합한 강력하고 유연한 테스팅 프레임워크로, Nest.js와 함께 사용할 때 효율적인 테스트 환경을 제공합니다. 이번 포스트에서는 Jest를 사용하여 Nest.js 애플리케이션의 테스트 환경을 설정하는 방법에 대해 자세히 알아보겠습니다.

1. Jest 소개

Jest란?

Jest는 Facebook이 개발한 오픈 소스 테스팅 프레임워크로, 특히 React 애플리케이션에서 널리 사용되지만, JavaScript 및 TypeScript 프로젝트 전반에 걸쳐 유용하게 활용될 수 있습니다. Jest는 간단하게 설치하고 사용할 수 있으며, 모듈화된 구조 덕분에 다양한 유형의 테스트(단위 테스트, 통합 테스트 등)를 지원합니다. 또한, Jest는 스냅샷 테스트, 비동기 테스트, 모의(mock) 기능 등 다양한 기능을 제공하여 개발자가 보다 효율적으로 테스트를 작성할 수 있도록 돕습니다.

2. Nest.js에서 Jest 설정하기

Nest.js 프로젝트에서는 기본적으로 jest와 관련된 패키지가 포함되어 있습니다. 그러나 추가적인 설정이 필요할 수도 있습니다. 이를 통해 테스트 환경을 최적화하고, 애플리케이션의 다양한 기능을 효과적으로 검증할 수 있습니다.

설치

npm install --save-dev jest @nestjs/testing ts-jest @types/jest

위 명령어를 통해 Jest와 Nest.js에서의 테스트를 지원하는 패키지를 설치합니다. 이 과정은 테스트 환경을 구축하는 첫 번째 단계로, 필요한 모든 의존성을 확보하는 데 필수적입니다.

기본 설정 파일 생성

프로젝트 루트 디렉토리에 jest.config.js 파일을 생성하여 다음과 같이 작성합니다:

module.exports = {
    preset: 'ts-jest',
    testEnvironment: 'node',
};

이 설정 파일은 Jest가 TypeScript 파일을 처리할 수 있도록 하고, 테스트 환경을 Node.js로 설정하여 서버 사이드 애플리케이션에 적합한 테스트를 수행할 수 있게 합니다.

3. 기본적인 단위 테스트 작성하기

이제 간단한 서비스 클래스를 만들어보고 이를 위한 단위 테스트를 작성해보겠습니다. 단위 테스트는 개별 모듈이나 함수의 동작을 검증하는 데 중점을 두며, 이를 통해 코드의 신뢰성을 높일 수 있습니다.

서비스 클래스 예시 (app.service.ts)

import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
    getHello(): string {
        return 'Hello World!';
    }
}

위의 서비스 클래스는 간단한 메서드 getHello를 포함하고 있으며, 이 메서드는 문자열 'Hello World!'를 반환합니다. 이처럼 간단한 기능부터 시작하여 점차 복잡한 로직으로 확장할 수 있습니다.

테스트 파일 예시 (app.service.spec.ts)

import { Test, TestingModule } from '@nestjs/testing';
import { AppService } from './app.service';

describe('AppService', () => {
    let service: AppService;

    beforeEach(async () => {
        const module: TestingModule = await Test.createTestingModule({
            providers: [AppService],
        }).compile();

        service = module.get<AppService>(AppService);
    });

    it('should return "Hello World!"', () => {
        expect(service.getHello()).toBe('Hello World!');
    });
});

여기서 describe 블록은 특정 기능 또는 모듈에 대한 그룹화를 제공하며, 각 it 블록은 개별적인 테스트 케이스를 정의합니다. 이러한 구조는 테스트를 보다 체계적으로 관리할 수 있게 해줍니다.

4. 명령어로 실행하기

테스트를 실행하려면 다음 명령어를 사용합니다:

npm run test

이 명령어는 모든 .spec.ts 파일을 찾아 실행하며 결과를 출력합니다. 이를 통해 작성한 테스트가 올바르게 작동하는지 확인할 수 있습니다.

5. 커버리지 리포트 확인하기

코드 커버리지를 확인하려면 아래 명령어를 사용하세요:

npm run test -- --coverage

커버리지 리포트가 생성되며 어떤 부분이 잘 커버되고 있는지 쉽게 파악할 수 있습니다. 이 리포트는 테스트가 얼마나 많은 코드 경로를 검증했는지를 시각적으로 보여주어, 추가적인 테스트가 필요한 부분을 식별하는 데 유용합니다.

결론

Jest는 Nest.js 애플리케이션에서 효과적이고 신뢰성 있는 테스팅 환경을 구축하는 데 필수적인 도구입니다. 위의 과정을 통해 기본적인 설정과 단위 테스트 작성을 배웠습니다. 지속적으로 더 복잡한 비즈니스 로직이나 외부 API와의 상호작용 등을 다루면서 통합 및 E2E(End to End) 테스트로 확장할 수 있습니다. 이러한 테스트는 애플리케이션의 전반적인 품질을 높이고, 사용자에게 더 나은 경험을 제공하는 데 기여할 것입니다.

728x90