TypeScript Jest

Jest 단위 테스트의 Arrange-Act-Assert 구조

단위 테스트는 입력 준비, 실행, 결과 검증을 분리해 함수·서비스의 계약을 작게 고정한다.

01

계약 선택

구현 줄 수보다 외부에서 보장해야 하는 동작 하나를 테스트 이름으로 잡는다.

behavior
02

입력 준비

fixture와 mock을 최소화해 실패 원인이 테스트 대상에 남게 한다.

arrange
03

대상 실행

Act 단계는 가능한 한 한 줄로 두어 무엇을 검증하는지 선명하게 만든다.

act
04

결과 검증

반환값, 예외, dependency 호출 여부를 명확한 matcher로 확인한다.

assert
Mock
외부 API, 시간, 랜덤, DB 같은 비결정 요소를 대체한다. 테스트 대상 내부 로직까지 과하게 mock하면 의미가 줄어든다.
mock 경계
비동기
Promise 테스트는 await expect 또는 resolves/rejects로 기다린다. 기다리지 않으면 실패가 테스트 밖으로 새거나 false positive가 된다.
await test
스냅샷
큰 스냅샷은 의도보다 결과물 전체에 묶인다. 중요한 필드와 사용자 행동을 직접 검증한다.
specific assert

테스트 품질 기준

이름 테스트 이름이 조건과 기대 결과를 말한다.
격리 테스트 간 공유 상태가 beforeEach에서 초기화된다.
실패 메시지 실패했을 때 어떤 계약이 깨졌는지 바로 보인다.

AAA 예시

it("returns active users only", () => {
  const users = makeUsers();
  const result = filterActive(users);
  expect(result).toEqual([users[0]]);
});