NestJS를 공부하던 도중 it
구문을 발견했고 짧은 개발자 경험이지만 처음 보는 문법(?) 이였다. 궁금했고 찾아봤다.
이번 노트는 NestJS에서 개발자가 작성한 소프트웨어를 가장 작은 단위로 테스트하는 NestJS의 유닛 테스트
에 대해 작성하려 한다.
먼저 유닛 테스트(Unit Test)
에 대해 알아보자.
유닛 테스트
는 소프트웨어를 이루고 있는 가장 작은 모듈에 대해서 테스트하는 것을 말한다.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
내에 정의하게 된다. 위의 코드를 보면 파일의 가장 바깥 부분의 describe
에 AppController
라고 선언해 이 describe
에 정의할 테스트케이스가 AppController
에 대한 테스트라는 것을 선언한다.
beforeEach
는 각 테스트케이스가 실행되기 이전에 수행될 내용을 정의한다.
하단의 it
구문은 테스트 케이스에 대한 설명과 테스트 코드가 들어가는 부분이다. 이 테스트 케이스는 어떠한 결과를 기대한다는 식의 타깃 코드의 기대동작을 작성한면 된다. 여기서는 appController
의 getHello()
를 불러 그 결과로 Hello Wrold!!
의 결과를 기대하고 있다.