카테고리 없음
Jest 학습 로드맵
lamarcK
2025. 4. 16. 15:37
1단계: 기본 테스트 작성법
// 1. 기본적인 matcher 사용법
test('기본 테스트', () => {
expect(2 + 2).toBe(4);
expect({name: 'test'}).toEqual({name: 'test'});
expect([1, 2, 3]).toContain(2);
});
// 2. 비동기 테스트
test('비동기 함수 테스트', async () => {
const data = await fetchData();
expect(data).toBeDefined();
});
2단계: 컴포넌트 렌더링 테스트
// 상품 검색 컴포넌트 테스트
import { render, screen } from '@testing-library/react';
test('검색 입력창이 렌더링된다', () => {
render(<SearchBar />);
const searchInput = screen.getByPlaceholderText('상품을 검색하세요');
expect(searchInput).toBeInTheDocument();
});
3단계: 사용자 인터랙션 테스트
// Todo 앱의 사용자 입력 테스트
import { render, fireEvent } from '@testing-library/react';
test('새로운 할 일을 추가할 수 있다', () => {
render(<TodoApp />);
const input = screen.getByPlaceholderText('할 일을 입력하세요');
const addButton = screen.getByText('추가');
fireEvent.change(input, { target: { value: '새로운 할 일' } });
fireEvent.click(addButton);
expect(screen.getByText('새로운 할 일')).toBeInTheDocument();
});
4단계: 상태 관리 테스트
// 상태 변화 테스트
test('카운터 상태 변화', () => {
render(<Counter />);
const incrementButton = screen.getByText('+');
fireEvent.click(incrementButton);
expect(screen.getByText('1')).toBeInTheDocument();
});
5단계: 컴포넌트 간 통신 테스트
// 부모-자식 컴포넌트 데이터 전달 테스트
test('자식 컴포넌트가 props를 올바르게 받는다', () => {
render(<Parent />);
const childElement = screen.getByTestId('child');
expect(childElement).toHaveTextContent('전달된 데이터');
});
6단계: Mock 함수와 API 테스트
// API 호출 모킹
test('API 데이터 로딩', async () => {
const mockData = [{ id: 1, name: '상품1' }];
jest.spyOn(global, 'fetch').mockResolvedValue({
json: () => Promise.resolve(mockData)
});
render(<ProductList />);
const products = await screen.findByText('상품1');
expect(products).toBeInTheDocument();
});
7단계: 통합 테스트 시나리오
// 검색 기능 통합 테스트
describe('상품 검색 기능', () => {
beforeEach(() => {
render(<ProductSearchApp />);
});
test('검색어 입력시 필터링된 결과가 보인다', () => {
const searchInput = screen.getByRole('textbox');
fireEvent.change(searchInput, { target: { value: '노트북' } });
expect(screen.getByText('맥북')).toBeInTheDocument();
expect(screen.queryByText('키보드')).not.toBeInTheDocument();
});
});
학습 순서:
- Jest 기본 문법과 matcher 사용법
- 컴포넌트 렌더링 테스트
- 이벤트 핸들링 테스트
- 상태 관리 테스트
- 컴포넌트 간 통신 테스트
- API 통신 테스트
- Mock 함수 활용
- 통합 테스트 작성
주요 학습 포인트:
- Jest matcher 함수들의 사용법
- React Testing Library의 render, screen, fireEvent 활용
- 비동기 테스트 처리 방법
- Mock 함수 생성과 활용
- 테스트 케이스 구조화 (describe, beforeEach 등)
- 컴포넌트 테스트 전략 수립
이러한 순서로 학습하면서 실제 프로젝트의 테스트 케이스를 작성하면 효과적으로 Jest를 익힐 수 있습니다.