테스트 작성 루프 점검

Jest 테스트 사이클

단위 테스트 구조는 Jest 문법의 양보다 실패 시 원인을 좁게 드러내는 흐름이 중요합니다. fixture 준비, 대상 실행, matcher 단언, mock 정리의 순서를 고정하면 테스트가 문서와 회귀 방지 역할을 동시에 합니다.

01

fixture를 작게 만든다

필요한 입력만 구성하고 테스트 이름에서 기대 계약을 먼저 드러냅니다.

Arrange
02

행동을 한 번 실행한다

검증하려는 함수 호출이나 UI 이벤트를 한 지점에 모아 실패 원인을 흐리지 않습니다.

Act
03

관찰 가능한 결과를 단언한다

반환값, 예외, 호출 인자, 화면 텍스트처럼 외부에서 보이는 결과를 matcher로 확인합니다.

Assert
04

격리를 복구한다

mock, timer, module cache, DOM을 정리해 다음 테스트가 이전 상태를 물려받지 않게 합니다.

Cleanup
Matcher
값의 성격에 맞는 단언을 고른다 동등성, 포함 여부, 예외, 비동기 완료를 구분해 실패 메시지를 읽기 쉽게 합니다.
assert
Mock
외부 의존성만 통제하고 내부 구현은 덜 묶는다 네트워크, 시간, 랜덤처럼 결과를 흔드는 경계에 집중합니다.
isolate
Async
Promise가 끝나는 시점을 테스트가 기다리게 한다 await를 빠뜨리면 실패해야 할 테스트가 조용히 통과할 수 있습니다.
await

성공과 실패 · 테스트 이름 · 독립 실행 점검

성공과 실패 정상 케이스만 있으면 실제 회귀의 절반을 놓치므로 오류와 빈 값 입력을 같이 둡니다.
테스트 이름 구현 방법이 아니라 사용자가 기대하는 계약을 문장으로 씁니다.
독립 실행 이 파일 하나만 돌려도, 전체 묶음으로 돌려도 결과가 같아야 합니다.

테스트 한 사이클

const input = makeUserInput();
const result = normalizeUser(input);
expect(result.email).toBe('a@example.com');
expect(saveUser).not.toHaveBeenCalled();