Jest/TDD

5BRack·2022년 10월 19일

백엔드 로드맵

목록 보기
19/28

테스트 코드 필요성

  • 코드의 변화가 있을 때마다 직접 수동으로 모든 기능을 테스트하는 것은 비효율적이다.
  • 업데이트 및 재배포시에, 추가된 기능 뿐만이 아니라 기존의 기능도 테스트를 진행해야 한다.

JEST

  • JavaScript 테스트 프레임워크이다.
  • Babel , TypeScript , Node.js , React , Angular , Vue.js 및 Svelte 를 사용하는 프로젝트에서 작동한다.

사용방법

describe - 그룹 테스트 단위
beforeEach - 테스트가 진행되기전 사전에 진행되는 코드
it - 최소 테스트 단위

import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appService: AppService;  //의존성 주입
  let appController: AppController; //의존성 주입

  beforeEach(() => { //테스트 단위인 it가 진행되기전 사전에 진행되는 코드
    appService = new AppService();
    appController = new AppController(appService);
  });

  describe('getHello', () => {
    it('이 테스트의 검증 결과는 Hello World를 리턴해야함!!', () => {
      const result = appController.getHello();
      expect(result).toBe('Hello World!');
    });
  });
});
  • 의존성 주입을 자동으로 해주는 Module 사용
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);
  });
  describe('getHello', () => {
    it('이 테스트의 검증 결과는 Hello World를 리턴해야함!!', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});

Mocking

  • 모킹은 단위 테스트를 작성시, 코드가 의존하는 부분을 가짜로 대체하는 기법이다.
  • 테스트 코드가 의존하는 부분을 직접 사용하기가 힘든 경우, 모킹으로 해당 의존 부분을 대체해주어야 한다.
  • 현업에서는 데이터베이스 연결부분을 실제 의존성주입을 하지 않고 모킹으로 대체하여 테스트를 진행한다.

TDD

  • 테스트 주도 개발 방법론(Test-driven Development)의 약자이다.
  • 일반적인 개발론은 디자인 -> 개발 -> 테스트의 단계를 거친다.
  • TDD는 미리 실패, 통과 테스트 코드를 만들어 놓고 테스트결과에 맞는 코드로 개발을 하는 것이다.

0개의 댓글