https://legacy.reactjs.org/docs/testing.html
Testing Overview – React
A JavaScript library for building user interfaces
legacy.reactjs.org
위의 내용을 이해한 바탕으로 예시를 적용해 이해해보자.
테스트 개요
리액트 컴포넌트를 테스트하는 방법은 크게 두 가지로 나눌 수 있다.
1. 컴포넌트를 간단한 테스트 환경에서 실행하고 결과를 확인하기
- 예시 : 로그인 폼 컴포넌트를 테스트할 때, 사용자가 입력한 이메일과 비밀번호가 제대로 표시되는지 확인하는 것
2. 실제 브라우저 환경에서 전체 앱을 실행하기 (E2E Test)
- 예시 : 사용자가 로그인 버튼을 클릭했을 때, 홈페이지로 잘 이동하는지를 테스트하는 것
선택할 때 고려할 점
테스트 도구를 선택할 때 몇 가지 중요한 점을 생각해야 한다.
1. 변경 속도 vs 현실적인 환경
- 예시 : Jest를 사용하면 코드를 변경 후 바로 결과를 확인할 수 있지만, 실제 브라우저에서 테스트할 때는 여러 환경 요인 때문에 시간이 더 걸릴 수 있다.
2. 얼마나, 어디까지 모의 테스트를 할 것인가
- 예시 : 폼 컴포넌트를 테스트할 때, 내부의 버튼도 함께 테스트해야 할지, 아니면 버튼을 별도로 테스트해야 할지 고민할 수 있다. 만약 버튼이 바뀌면 폼 테스트가 실패할 수 있기 때문이다.
추천 도구
1. Jest
- 자바스크립트 테스트 실행기다. jsdom을 통해 DOM에 접근할 수 있다.
- jsdom은 브라우저의 동작을 완벽하게 구현하지는 않지만, 리액트 컴포넌트를 테스트하기에는 충분히 좋다.
- 빠른 피드백과 강력한 기능(모듈 모킹, 타이머 제어 등)을 제공한다.
- 예시 : Jest를 사용해 사용자가 로그인할 때 입력한 값을 확인하는 테스트를 작성할 수 있다.
test('로그인 버튼 클릭 시 입력 값 확인', () => {
// Mocking the input values
const email = 'test@example.com';
const password = 'password123';
// Test logic here...
});
2. React Testing Library
- 리액트 컴포넌트를 구현 세부 사항에 의존하지 않고 테스트할 수 있게 도와주는 도구이다.
- 이렇게 하면 리팩토링(코드 구조 변경)이 쉬워지고, 접근성에 대한 최선의 실천을 유도한다.
- 자식 컴포넌트를 제외하고 "얕게" 렌더링하는 방법은 제공하지 않는다.( 즉, 컴포넌트 내부에 어느 한 부분만 테스트하고 싶지만 안에 자식 컴포넌트들까지 렌더링함 ) 그러나 Jest와 함께 사용하면 모킹을 통해 가능하다.
- 예시 : React Testing Library를 사용해 로그인 폼이 올바르게 렌더링되는지 테스트할 수 있다.
import { render, screen } from '@testing-library/react';
import LoginForm from './LoginForm';
test('이메일 입력란이 화면에 보인다', () => {
render(<LoginForm />);
const emailInput = screen.getByLabelText(/이메일/i);
expect(emailInput).toBeInTheDocument();
});
'TDD' 카테고리의 다른 글
렌더링 테스트와 스냅샷 테스트에 대해 (1) | 2024.09.09 |
---|---|
테스트 코드를 리액트에 적용해보자 (1) | 2024.09.05 |
TDD - stub 방식과 mock 방식 (2) | 2024.09.04 |
TDD 예제 2 (Dependency Injection)에 대해서 (3) | 2024.09.02 |
테스트 코드의 원칙을 다시 상기하자. (0) | 2024.08.29 |