Jest는 단순함, 무설정(Zero-config), 즉각적인 스냅샷 테스트에 중점을 둔 강력한 자바스크립트 테스팅 프레임워크입니다.
테스트 실행 및 CLI 옵션 (CLI Flags)
jest # 전체 테스트 실행
jest --watch # 대화형 감시 모드로 테스트 실행
jest --coverage # 코드 커버리지 리포트 생성
jest path/to/test.js # 특정 테스트 파일 실행
jest -t "test name pattern" # 테스트 설명 문자열 패턴으로 필터링
jest --runInBand # 단일 프로세스에서 직렬로 테스트 실행
주요 매처 (Common Matchers)
// 참/거짓 및 일치 검증
expect(val).toBe(42); // 엄격한 동등성 비교 (Object.is)
expect(val).toEqual({ a: 1 }); // 객체 및 배열의 깊은 구조적 동등성 비교
expect(val).toStrictEqual({ a: 1 }); // 타입 프로토타입까지 엄격하게 검증
expect(val).toBeNull();
expect(val).toBeDefined();
expect(val).toBeTruthy();
expect(val).toBeFalsy();
// 숫자 및 크기 비교
expect(val).toBeGreaterThan(3);
expect(val).toBeGreaterThanOrEqual(3.5);
expect(val).toBeCloseTo(0.3, 5); // 부동 소수점 연산 오차를 고려한 근사치 비교
// 문자열 및 배열
expect(str).toMatch(/regex/);
expect(arr).toContain('item');
expect(arr).toHaveLength(3);
// 예외 발생 검증
expect(() => compileCode()).toThrow();
expect(() => compileCode()).toThrow(ConfigError);
비동기 코드 테스트 (Asynchronous Code)
test('resolves with data', async () => {
const data = await fetchData();
expect(data).toHaveProperty('status', 200);
});
test('handles promise rejection', async () => {
await expect(fetchData('invalid')).rejects.toThrow('Not Found');
});
Mock 함수 및 스파이 (jest.fn() & Spies)
const mockFn = jest.fn().mockReturnValue('mocked result');
mockFn('arg1');
expect(mockFn).toHaveBeenCalledTimes(1);
expect(mockFn).toHaveBeenCalledWith('arg1');
// Mocking module methods
const spy = jest.spyOn(api, 'getUser').mockResolvedValue({ id: 1, name: 'Alice' });
const user = await api.getUser(1);
expect(spy).toHaveBeenCalled();
spy.mockRestore(); // 원본 함수 구현으로 복원
스냅샷 테스트 (Snapshot Testing)
test('renders correctly', () => {
const tree = renderer.create(<Button label="Submit" />).toJSON();
expect(tree).toMatchSnapshot();
});
사전 설정 및 정리 훅 (Setup and Teardown)
beforeAll(() => database.connect());
afterAll(() => database.disconnect());
beforeEach(() => database.clear());
afterEach(() => jest.clearAllMocks());