Jest
: 테스트를 실행하고 결과를 주장하기 위한 도구가 필요하다React Testing Library
: 반응 앱 / 구성 요소를 '시뮬레이션'하는 도구가 필요하다두 툴 모두 create-react-app을 사용할 때 이미 설정되어 있다
Arrange
: 테스트 데이터, 테스트 조건 및 테스트 환경 설정Act
: 테스트해야 하는 실행 논리(예: 실행 함수)Assert
: 실행 결과와 예상 결과 비교컴포넌트이름.test.js
파일을 생성해준다// 예시
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import Greeting from './Greeting';
describe('Greeting component', () => {
test('renders "Hello World" as a text', () => {
// Arrange
render(<Greeting />);
// Act
// ... nothing
// Assert
const helloWorldElement = screen.getByText('Hello World', { exact: false });
expect(helloWorldElement).toBeInTheDocument();
});
test('renders "good to see you" if the button was NOT clicked', () => {
render(<Greeting />);
const outputElement = screen.getByText('good to see you', { exact: false });
expect(outputElement).toBeInTheDocument();
});
test('renders "Changed!" if the button was clicked', () => {
// Arrange
render(<Greeting />);
// Act
const buttonElement = screen.getByRole('button');
userEvent.click(buttonElement);
// Assert
const outputElement = screen.getByText('Changed!');
expect(outputElement).toBeInTheDocument();
});
test('does not render "good to see you" if the button was clicked', () => {
// Arrange
render(<Greeting />);
// Act
const buttonElement = screen.getByRole('button');
userEvent.click(buttonElement);
// Assert
const outputElement = screen.queryByText('good to see you', {
exact: false,
});
expect(outputElement).toBeNull();
});
});