728x90
- nest에는 기본적으로 테스트코드로 유명한 Jest가 깔려있음.
src/app.controller.spec.ts 가 있다.
- 1개 테스트하기
간단하게 aaa.spec.ts 라는 파일을 만들고
// 1. 한개 테스트하기
it('더하기 테스트', () => {
const a = 1;
const b = 2;
expect(a + b).toBe(3);
});
(it 뒤에는 테스트 코드 명칭, tbBe()는 내가 예상하는 값)
yarn test
를 돌려보면
이렇게 나온다.
다시 알맞은 예상값인 3으로 toBe를 바꾸고 test를 돌리면
정상적으로 테스트가 통과된다.
- 여러개 테스트하기
// 2. 여러개 묶음으로 테스트하기
describe('나의 테스트 그룹', () => {
it('더하기 테스트', () => {
const a = 1;
const b = 2;
expect(a + b).toBe(3);
});
it('곱하기 테스트', () => {
const a = 1;
const b = 2;
expect(a * b).toBe(1);
});
});
틀린 값으로 돌리면
이렇게 나온다. 다시 바른 값으로 돌리면,
이렇게 나온다.
(test가 total 4인 이유는 it이 1개, describe가 1개로 잡혀서 it 3개, describe 1개로 총 4개가 된다. 근데 그럼 it 한개만 틀린거 처리되었다는건데 discribe도 틀린거 처리해야되는거 아닌가??)
- 시나리오 테스트
- beforeAll(), beforeEach()
// 3. 상품구매하기 테스트 예제
describe('상품구매테스트', () => {
beforeAll(() => {}); // 모든 it들 실행하기 전에 딱 1번 실행 (예: 로그인 등)
beforeEach(() => {}); // 각각의 it들 실행하기 전에 매번 실행 (예: 초기값, 초기화 등)
it('돈검증하기', () => {
const result = true; // 돈이 충분하다고 가정
expect(result).toBe(true);
});
it('상품구매하기', () => {
const result = true; // 상품을 구매했다고 가정
expect(result).toBe(true);
});
});
- 간단한 시나리오 테스트 코드 (직접 의존성 주입해주는 고전 방식)
import { AppController } from './app.controller';
import { AppService } from './app.service';
describe('AppController', () => {
let appService: AppService;
let appController: AppController;
beforeEach(() => {
appService = new AppService();
appController = new AppController(appService);
});
describe('getHello', () => {
it('이 테스트의 검증 결과는 Hello World를 리턴해야함!!!', () => {
expect(appController.getHello()).toBe('Hello World!222');
});
// it("테스트 2", () => {
// expect().toBe()
// })
});
// describe('fetchboards', () => {
// })
// describe('createBoard', () => {
// })
});
toBe() 를 올바르게 "Hello World!" 로 고치면
- Nest의 Module 방식 사용하는 방식 === app.controller.spec.ts 랑 똑같은 모양임.
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { Test, TestingModule } from '@nestjs/testing';
describe('AppController', () => {
let appController: AppController;
beforeEach(async () => {
const app: TestingModule = await Test.createTestingModule({
controllers: [AppController],
providers: [AppService],
}).compile();
appController = app.get<AppController>(AppController);
});
describe('getHello', () => {
it('이 테스트의 검증 결과는 Hello World를 리턴해야함!!!', () => {
expect(appController.getHello()).toBe('Hello World!');
});
// it("테스트 2", () => {
// expect().toBe()
// })
});
// describe('fetchboards', () => {
// })
// describe('createBoard', () => {
// })
});
728x90