TDD ( feat. Jest )

조성민·2022년 8월 20일
0

Nest

목록 보기
4/4

1. TDD

TDD란 Test Driven Development의 약자로 ‘테스트 주도 개발’이라고 합니다.

개발을 할 때, 규모가 작을 땐 직접 플레이드라운드에 들어가서 코드가 잘 돌아가는지 하나하나 체크 할 수 있지만 기능이 많아지면 헷갈리면서 실수를 할 수 있게 됩니다.
쉽게 말해서 내가 짠 코드를 테스트 하기 위해 코드로 테스트하는 것을 TDD라고 합니다.

테스트 하는 방법

  • 개별 기능 단위테스트 ( unit test )
  • 여러 기능 한꺼번에 하는 통합 테스트 ( integration test )
  • 접속해서 로그인하고 구매하는 등 시나리오가 있는 E2E(end-to-end) 테스트 ( cypress )
  • 등등..

2. Jest

자바스크립트에서 테스트 코드를 작성하는 것을 도와주는 여러가지 프레임워크들이 있지만, 저는 Nestjs를 쓰고 있으므로 Nestjs에서 기본 테스트 프레임워크로 지원하고 있는 Jest에 대해 써보겠습니다.


// test.spec.ts

describe('test', () => {
  beforeEach(() => {
    // 서비스 코드를 실행하기 이전에 필요한 로직들
  });

  it('serviceToTest', () => {
    // 서비스 코드

    const result = true; // 가정
    expect(result).toBe(true);
  });
});

package.json을 보게 되면 jest가 자동으로 깔려있고 jest안에 "testRegex": ".*\.spec\.ts$" 라는 구간을 보면 spec이 적혀있는 파일을 test파일로 읽고 있습니다.

Nestjs 폴더를 만들면 기본으로 있는 app.controller.spec.ts를 보면 구조가 대충 보입니다.

  • beforeEach : Testing 이전에 실행되는 부분
  • describe : 여러개의 테스트 모아놓은 그룹 단위
  • it : 한 테스트 단위

Mocking

Jest는 다른 라이브러리 설치 없이 바로 mock 기능을 지원합니다.

mocking은 단위 테스트를 작성할 때 해당 코드가 의존하는 부분을 가짜로 대체하는 기법입니다. 보통 테스트하려는 코드가 의존하는 부분을 직접 생성하기 너무 부담스러운 경우 mocking을 많이 사용합니다.

mocking은 실제 객체인 척하는 가짜 객체를 생성하는 매커니즘입니다. 테스트가 실행되는 동안 객체가 호출되거나, 어떤 아웃풋을 반환하는지 등을 기억할 수 있기 때문에 어떻게 사용되는 지 검증이 가능합니다. mocking을 이용하면 구체적으로 구현해야 하는 실제 객체 사용보다 훨씬 빠르고, 동일한 결과를 내는 테스트를 작성 가능합니다.

profile
풀리면 재밌는 알고리즘

0개의 댓글