NestJS를 사용한 자바스크립트 앱의 테스트 코드 작성 방법

NestJS는 자바스크립트 및 TypeScript를 사용하여 확장 가능하고 모듈화된 애플리케이션을 구축하기위한 프레임워크입니다. 애플리케이션을 테스트하는 것은 안정성을 보장하고 버그를 찾기 위해 매우 중요합니다. 이번 블로그 포스트에서는 NestJS 앱의 테스트 코드를 작성하는 방법을 살펴보겠습니다.

1. 테스트 환경 설정

테스트 코드를 작성하기 전에 테스트 환경을 설정해야합니다. NestJS에서는 내장된 테스팅 모듈인 @nestjs/testing을 사용하여 테스트 환경을 설정할 수 있습니다.

import { Test } from '@nestjs/testing';
import { AppModule } from '../src/app.module';

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

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

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

  afterAll(async () => {
    await app.close();
  });

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

위의 예제에서는 Test.createTestingModule을 사용하여 테스트 모듈을 만들고 createNestApplication을 사용하여 애플리케이션을 초기화합니다. 그런 다음, request(app.getHttpServer())를 사용하여 애플리케이션의 HTTP 서버에 요청을 보내고 예상되는 결과를 확인합니다.

2. 단위 테스트 작성

NestJS에서는 각 모듈, 컨트롤러, 서비스 등을 단위 테스트할 수 있습니다. 이를 위해 Jest와 같은 테스트 프레임워크를 사용할 수 있습니다.

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!');
  });
});

위의 예제에서는 Test.createTestingModule를 사용하여 AppService를 테스트할 모듈을 만듭니다. 그런 다음, module.get<AppService>(AppService)를 사용하여 AppService의 인스턴스를 가져와서 테스트합니다.

3. Mocking을 사용한 테스트

NestJS에서는 Mocking을 사용하여 종속성을 직접 제어하고 테스트를 쉽게 작성할 수 있습니다. 아래 예제는 AppService를 의존성으로 갖는 AppController를 테스트하는 방법을 보여줍니다.

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

class MockAppService {
  getHello() {
    return 'Hello Mock!';
  }
}

describe('AppController', () => {
  let appController: AppController;

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

    appController = module.get<AppController>(AppController);
  });

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

위의 예제에서는 provide 속성을 사용하여 AppService의 Mock 클래스 MockAppService를 제공합니다. 이렇게 하면 AppControllerAppService의 인스턴스 대신 Mock 클래스를 사용하게 됩니다.

4. Conclusion

이 글에서는 NestJS의 테스트 코드 작성 방법에 대해 알아보았습니다. 테스트 코드를 작성하면 애플리케이션의 안정성을 높일 수 있으며 버그를 더 쉽게 찾을 수 있습니다. NestJS와 Jest를 사용하면 간단한 단위 테스트부터 복잡한 테스트까지 쉽게 작성할 수 있습니다. NestJS 앱을 개발할 때는 항상 테스트 코드 작성을 고려해보세요.

이해당하다 #NestJS #자바스크립트 #테스트