코딩/TestCode

Jest

춘 몽 2024. 4. 27. 00:31

- 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', () => {

  // })
});

 

'코딩 > TestCode' 카테고리의 다른 글

Mocking  (0) 2024.04.27