프로그래밍/Nest.js

Nest.js에서의 단위 테스트: 소프트웨어 품질을 높이는 필수 도구

shimdh 2025. 3. 16. 20:47
728x90

단위 테스트는 소프트웨어 개발에서 매우 중요한 역할을 하며, 특히 Nest.js와 같은 프레임워크를 사용할 때 그 중요성이 더욱 부각됩니다. 이 블로그 포스트에서는 단위 테스트의 중요성과 Nest.js에서의 설정 방법, 그리고 간단한 예제를 통해 단위 테스트를 효과적으로 활용하는 방법에 대해 알아보겠습니다.

단위 테스트의 중요성

단위 테스트는 개별 모듈이나 컴포넌트를 독립적으로 검증하는 체계적인 과정입니다. 이를 통해 다음과 같은 이점을 얻을 수 있습니다.

1. 신뢰성 향상

소프트웨어 개발 과정에서 코드를 변경하거나 새로운 기능을 추가할 때, 기존 기능이 여전히 정상적으로 작동하는지를 확인할 수 있습니다. 이는 소프트웨어의 신뢰성을 높이는 데 중요한 요소입니다.

2. 코드 품질 유지

단위 테스트를 통해 버그를 조기에 발견하고 수정함으로써, 코드의 전반적인 품질을 높일 수 있습니다. 이는 장기적으로 유지보수 비용을 절감하는 데도 기여합니다.

3. 문서화 역할

단위 테스트는 코드의 사용법과 기대되는 결과에 대한 문서 역할을 수행합니다. 이를 통해 다른 개발자들이 코드를 이해하고 활용하는 데 도움을 줄 수 있습니다.

Nest.js에서의 단위 테스트 설정

Nest.js에서는 기본적으로 Jest라는 테스팅 프레임워크를 사용합니다. Jest는 JavaScript 환경에서 매우 인기 있는 테스팅 도구로, 간편하게 사용할 수 있는 API와 빠른 실행 속도를 자랑합니다. 이를 통해 개발자는 효율적으로 테스트를 작성하고 실행할 수 있습니다.

프로젝트 생성 시 기본 설치

Nest.js 프로젝트를 생성할 때 nest new project-name 명령어를 사용하면, Jest가 기본적으로 포함되어 있습니다. 이로 인해 별도의 설정 없이도 즉시 테스트를 시작할 수 있습니다.

테스트 파일 구조

각 서비스나 컨트롤러에 대해 동일한 이름의 .spec.ts 파일이 자동으로 생성됩니다. 예를 들어, 다음과 같은 구조를 가집니다:

src/
  ├── app.controller.ts
  ├── app.controller.spec.ts  // 여기서 단위 테스트 작성
  └── app.service.ts
  └── app.service.spec.ts      // 여기서 서비스 관련 단위 테스트 작성

간단한 예제: 서비스의 단위 테스트

이제 AppService라는 서비스를 가지고 있다고 가정해봅시다. 이 서비스는 두 숫자를 더하는 메소드를 가지고 있습니다. 다음은 해당 서비스의 코드입니다:

// src/app.service.ts

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

@Injectable()
export class AppService {
  add(a: number, b: number): number {
    return a + b;
  }
}

이제 이 메소드에 대한 단위 테스트를 작성해 보겠습니다. 아래는 AppServiceadd 메소드를 테스트하는 코드입니다:

// src/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 add two numbers correctly', () => {
    expect(service.add(2, 3)).toBe(5); // 기대값은 5입니다.
    expect(service.add(-1, -1)).toBe(-2); // 음수 값도 체크합니다.
  });
});

주요 요소 설명

  • describe: 특정 그룹 또는 모듈을 정의하며, 그 안에 여러 개별적인 test case들을 포함합니다. 이를 통해 관련된 테스트를 그룹화하여 관리할 수 있습니다.
  • beforeEach: 각 test case가 실행되기 전에 호출되는 초기화 함수입니다. 이를 통해 매번 새로운 인스턴스를 만들도록 하여 테스트 간의 독립성을 유지합니다.
  • it: 실제 test case를 정의하며, 어떤 동작을 수행하고 어떤 결과를 기대하는지를 기술합니다. 이는 테스트의 목적을 명확히 하는 데 도움을 줍니다.

실행 방법

작성한 모든 테스트는 다음 명령어로 실행할 수 있습니다:

npm run test 

또는 특정 파일만 선택적으로 실행하려면 다음과 같이 입력합니다:

npm run test src/app.service.spec.ts 

결론

단위 테스트는 Nest.js 애플리케이션 개발에서 필수적인 요소이며, 이를 통해 코드의 신뢰성과 품질을 확보할 수 있습니다. 위와 같은 방식으로 다양한 컴포넌트들을 독립적으로 검증하면서 안정적이고 확장 가능한 애플리케이션 구축에 기여하세요. 단위 테스트는 개발자에게 강력한 도구가 되어, 소프트웨어의 품질을 높이고, 유지보수성을 향상시키는 데 큰 도움이 될 것입니다.

728x90