Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

juni

Jest 본문

CS

Jest

juni_shin 2025. 7. 30. 00:48

🎯 Jest의 핵심 특징
✅ 장점:
Zero Config: 설정 없이 바로 사용 가능
Snapshot Testing: UI 변경사항 자동 감지
Mocking: 외부 의존성 쉽게 모킹
Coverage: 코드 커버리지 자동 측정
Parallel: 테스트 병렬 실행
Watch Mode: 파일 변경 시 자동 재테스트
❌ 단점:
느린 실행: 대규모 테스트 시 속도 저하
메모리 사용량: 많은 테스트 시 메모리 부족
복잡한 설정: Next.js 등과 연동 시 설정 복잡

 

 

🎯 Mock 파일 모킹이란?
1️⃣ 정의
실제 파일을 가짜 파일로 대체하는 테스트 기법
Jest 환경에서 브라우저 파일 처리를 위한 방법
테스트 속도 향상과 오류 방지를 위한 기법

 

모킹의 기본값은 undefined

// 모킹하지 않은 함수의 기본값
const mockFn = jest.fn();
console.log(mockFn()); // undefined

// 모킹하지 않은 객체의 기본값
const mockObj = {};
console.log(mockObj.someMethod); // undefined

 

📊 Mock 파일 모킹의 효과

✅ 오류 방지

✅ 테스트 속도 향상:
실제 파일 로딩 없음: 빠른 실행
메모리 사용량 감소: 파일 크기만큼 절약

✅ 모든 파일 타입 지원

 

테스트 내용:

성능 테스트
- 이미지 슬라이드 성능 (2000ms 이내)
- 반응형 렌더링 성능 (1500ms 이내)  
- 컴포넌트 마운트/언마운트 성능 (1000ms 이내)
- 이미지 로딩 성능 (3000ms 이내)

기능 테스트
- 컴포넌트 렌더링 확인
- 사용자 인터랙션 테스트

 

package.json 스크립트

{
  "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest",
  "test:watch": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --watch",
  "test:coverage": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --coverage"
}

cross-env: 크로스 플랫폼 환경 변수 설정
NODE_OPTIONS=--experimental-vm-modules: ES 모듈 지원

 

Jest의 역할과 기능

✅ 1. 단위 테스트 (Unit Testing)

// 컴포넌트 개별 테스트
test('컴포넌트가 올바르게 렌더링된다', () => {
  render(<Home />);
  expect(screen.getByText('Welcome')).toBeInTheDocument();
});

 

✅ 2. 통합 테스트 (Integration Testing)

// 여러 컴포넌트 간 상호작용 테스트
test('사용자 인터랙션이 올바르게 작동한다', async () => {
  render(<Home />);
  fireEvent.click(screen.getByRole('button'));
  await waitFor(() => {
    expect(screen.getByText('결과')).toBeInTheDocument();
  });
});

 

✅ 3. 성능 테스트 (Performance Testing)

// 렌더링 시간 측정
const measurePerformance = (fn) => {
  const start = performance.now();
  fn();
  const end = performance.now();
  return end - start;
};

 

✅ 4. 모킹 (Mocking)

// 외부 의존성 모킹
jest.mock('@/utils/supabase/client', () => ({
  createClient: jest.fn(() => ({
    from: jest.fn(() => ({
      select: jest.fn(() => ({
        order: jest.fn(() => ({
          limit: jest.fn(() => ({
            range: jest.fn(() => ({
              then: jest.fn((callback) => {
                // 가짜 데이터 반환
                return Promise.resolve({ data: mockPosts, error: null });
              })
            }))
          }))
        }))
      }))
    }))
  }))
}));

'CS' 카테고리의 다른 글

성능 테스트  (0) 2025.07.29
Canvas  (0) 2025.04.18
타입 검증 (zod, ReactHookForm)  (0) 2025.03.31
React의 라이프사이클과 가상 DOM 관점에서 Hook과 메모이제이션 동작  (0) 2025.03.11
HTML 이스케이프  (1) 2025.02.27