Jest 테스트 프레임워크 제대로 이해하기

권나현·2025년 8월 25일
0
post-thumbnail

테스트가 왜 필요한지부터 시작해서, Jest의 기본 사용법, 다양한 테스트 패턴, mock과 spy 활용법, 마지막으로 테스트 커버리지까지 폭넓게 정리되었다.

왜 테스트를 해야 할까?

  • 개발자가 코드를 작성할 때 "내가 의도한 대로 동작할까?"라는 고민은 늘 따라온다.

  • 그래서 테스트는 단순한 확인 작업을 넘어서, 버그를 미리 잡고, 리팩토링 시 안심하고 코드를 수정할 수 있도록 도와준다.

자동화 테스트의 장점

  • 반복 작업을 줄여준다 (사람이 매번 수동으로 확인하지 않아도 됨)

  • 코드의 동작 방식을 문서처럼 보여준다.

  • 장기적으로 보면 개발 속도가 빨라진다.

테스트의 종류

  • Jest를 활용할 때 가장 많이 쓰이는 테스트는 아래 세 가지다:
종류설명
유닛 테스트함수 하나만 떼어서 독립적으로 테스트
통합 테스트여러 함수/모듈이 연결된 상태에서의 동작 테스트
E2E 테스트사용자 입장에서 전체 플로우를 시나리오처럼 검증
  • 특히 이번 교육에서는 유닛 테스트와 통합 테스트 중심으로 다루고 있었다.

Jest 기본 사용법

1. 설치

npm install --save-dev jest ts-jest @types/jest typescript

  • --save-dev 옵션을 붙이는 이유: 실제 서비스에 포함되는 게 아니라 개발 환경에서만 쓰기 때문.

2. 설정 (package.json)

"scripts": {
  "test": "jest"
}

자주 쓰는 Jest 함수

  • test() 또는 it() : 테스트 단위 작성

  • expect() : 결과를 검증 (assertion)

  • describe() : 테스트 그룹 묶기

Matcher 예시

expect(result).toBe(3)
expect(users).toContain('nahyun')
expect(isValid).toBeTruthy()

비동기 코드 테스트

  • 비동기 코드는 별도로 완료 시점을 알려줘야 한다.

    • 콜백 방식: done() 사용

    • 요즘은 대부분 async/await 문법을 활용

test('async 함수 테스트', async () => {
  const result = await fetchData()
  expect(result).toEqual(expectedData)
})

테스트 더블 (Test Double)

  • 실제 객체를 대신해 테스트를 쉽게 하기 위해 사용하는 도구들 종류도 다양하다:
종류역할
Dummy단순히 자리를 채우는 값
Fake간단한 구현을 가진 가짜 객체
Stub정해진 값만 리턴하도록 설정
Mock호출 기록을 추적하고, 다양한 동작 흉내 가능
Spy기존 함수는 유지하면서 감시 기능 추가

Mock, Spy 실제 사용

1. jest.fn()

const mockFn = jest.fn()
mockFn.mockReturnValue(42)

2. spyOn 사용

jest.spyOn(Math, 'random').mockReturnValue(0.8)
  • spy는 기존 함수의 동작을 그대로 두면서 테스트용 기능만 덧붙이는 게 포인트.

테스트 작성 패턴 - 4단계

  1. Setup: 필요한 상태 준비 (beforeEach 등)

  2. Exercise: 테스트할 함수 실행

  3. Assertion: 결과 검증 (expect)

  4. Teardown: 정리 (afterEach 등)

  • Jest에서는 beforeAll, beforeEach, afterEach, afterAll 같은 훅을 제공해서 이 과정을 구조화할 수 있다.

테스트 커버리지

커버리지란?

  • 코드 중 테스트된 범위가 얼마나 되는지를 나타내는 지표

    • 라인 커버리지: 실행된 코드 라인의 비율

    • 함수 커버리지: 호출된 함수의 비율

    • 분기 커버리지: 조건문 등의 분기 처리까지 테스트했는지

      npx jest --coverage

오늘의 정리

  • Jest는 단순한 테스트 도구를 넘어, 테스트 작성의 패턴과 습관을 만들어주는 강력한 프레임워크이다.

  • mock, spy 등 다양한 방식으로 테스트를 유연하게 구성할 수 있다.

  • 테스트는 결국 "내가 만든 코드가 제대로 동작하고 있는지"를 꾸준히 확인하는 습관이다.

회고

처음에는 테스트 코드를 따로 작성하는 게 귀찮게 느껴졌는데,
직접 mock과 spy를 써보고, 커버리지까지 확인해보니 이게 진짜 개발의 일부분이라는 생각이 들었다.
앞으로 프로젝트에서도 테스트를 의식적으로 설계하고 적용해보려고 한다.

profile
node.js 백앤드 개발자가 되기 위한 Study Vlog

0개의 댓글