되새기기
describe('',()=>{}); // 여러개의 it를 사용하기 위해 사용
it('',()=>{}); // 하나의 검증을 위해 사용
beforeEach(() => {}); // it 실행전에 매번 실행해줌
nestjs 테스트 코드 작성
아래 코드는 app.controller.ts 파일의 초기 코드이다.
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
// service 코드..
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
이 컨트롤러 코드를 기반으로 테스트 코드를 짜보면 이렇게된다.
import { AppController } from './app.controller';
import { AppService } from './app.service';
describe('AppController', () => {
let appController: AppController;
let appService: AppService;
beforeEach(() => {
appService = new AppService();
appController = new AppController(appService); // 의존성 주입
});
describe('getHello ', () => {
it('이 테스트의 검증 결과는 Hello World를 리턴해야함!!!', () => {
expect(appController.getHello()).toBe('Hello World!');
});
});
});
테스트 코드 의존성 주입 리팩토링
nestjs의 Test, TestingModule를 사용한다.
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);
// appController = new AppController(appService); 위의랑 같은 코드임
});
describe('getHello ', () => {
it('이 테스트의 검증 결과는 Hello World를 리턴해야함!!!', () => {
expect(appController.getHello()).toBe('Hello World!');
});
});
});