[NestJS] Unit Test

모리스·2022년 8월 10일
0

NestJS

목록 보기
4/4
post-thumbnail

개요

NestJS를 공부하던 도중 it 구문을 발견했고 짧은 개발자 경험이지만 처음 보는 문법(?) 이였다. 궁금했고 찾아봤다.
이번 노트는 NestJS에서 개발자가 작성한 소프트웨어를 가장 작은 단위로 테스트하는 NestJS의 유닛 테스트에 대해 작성하려 한다.
먼저 유닛 테스트(Unit Test)에 대해 알아보자.

유닛 테스트는 소프트웨어를 이루고 있는 가장 작은 모듈에 대해서 테스트하는 것을 말한다. NestJS의 기준으로 말하자면 클래스 단위로 테스트하는 것을 말한다. 여기서 중요한 것은 각각의 테스트가 다른 테스트의 결과에 의존하면 안 된다. 각 테스트가 독립적인 목표와 상태를 가지고 있어 다른 테스트가 실패하던 성공하던 해당 테스트에 영향을 미치면 안 된다. 그래야 테스트가 실패했을 시 어느 부분에서 버그가 발생한 것인지 쉽게 파악이 가능하다.


NestJS 유닛 테스트

NestJS에서는 javascript 테스트 프레임워크인 jest를 기본 테스트 프레임워크로 제공한다.
NestJS의 testing 부터 설치해 보자

npm i --save-dev @nestjs/testing #npm
yarn add @nestjs/testing --dev #yarn

설치가 완료되면 NestJS 프로젝트 생성 시 함께 생성되는 spec.ts 파일에 다음과 같이 사용한다.

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

describe('AppController', () => {
  let appController: AppController;
  
  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();
    
    appController = app.get<AppController>(AppController);
  });
  
  it('should return "Hello Wrold!!', () => {
    expect(appController.getHello()).toBe('Hello Wrold!!');
  });
});

jestjs에서는 테스트 케이스들은 describe 내에 정의하게 된다. 위의 코드를 보면 파일의 가장 바깥 부분의 describeAppController라고 선언해 이 describe에 정의할 테스트케이스가 AppController에 대한 테스트라는 것을 선언한다.
beforeEach는 각 테스트케이스가 실행되기 이전에 수행될 내용을 정의한다.
하단의 it 구문은 테스트 케이스에 대한 설명과 테스트 코드가 들어가는 부분이다. 이 테스트 케이스는 어떠한 결과를 기대한다는 식의 타깃 코드의 기대동작을 작성한면 된다. 여기서는 appControllergetHello()를 불러 그 결과로 Hello Wrold!!의 결과를 기대하고 있다.


참조

profile
모바일 앱 개발 노트 :)

0개의 댓글