728x90
728x90
리액트 애플리케이션 테스트 환경 구축하기 (Vite, TypeScript, React)
들어가며
- Vite, TypeScript, React를 이용하여 프로젝트 템플릿을 생성하고, 리액트 애플리케이션 테스트 환경을 구축하는 방법을 정리해본다.

방법
1️⃣ 프로젝트 생성하기
Vite 프로젝트 설정하기
- 프로젝트 이름을 설정한다.
- @React@와 @TypeScript@를 선택한다.
$ npm create vite@latest
의존성 설치하기
- 아래의 명령을 실행하여 패키지를 설치한 후, 실행해본다.
$ npm install
$ npm run dev
2️⃣ Vite 환경에서 테스트 설정하기
Vitest 설치하기
- 아래의 명령을 실행하여 Vitest를 설치한다.
$ npm install -D vitest
Vitest
- Vite 기반의 빠르고 간편한 JavaScript/TypeScript 테스트 프레임워크
- Vite의 빌드 속도를 활용하여 더욱 빠른 테스트 실행이 가능하다.
- Jest와 유사한 API를 제공한다. (@describe@, @it@, @expect@ 등)
- 별도 설정 없이 TypeScript를 지원하며, Jest의 비스한 방식으로 Mocking 및 Spy 기능을 지원한다.
- 병렬 실행 및 핫 모듈 리로딩(HML) 기능을 지원한다.
- Node 및 브라우저 환경 테스트를 지원한다. (JSDOM과 함께 사용 가능)
package.json 파일 수정하기
- 프로젝트 최상위 경로에 있는 @package.json@ 파일에 다음과 같은 스크립트를 추가한다.
/package.json
{
// ...
"scripts": {
"test": "vitest"
}
///
}
테스트 파일 생성 및 실행해보기
- @/src@ 경로에 샘플 테스트 파일을 만들어본다.
./src/random.test.ts
import { describe, test, expect } from 'vitest';
describe("basic math", () => {
test("1 + 1 equals 2", () => {
expect(1 + 1).toBe(2);
});
});
- 아래의 명령을 실행하여 테스트를 해볼 수 있다.
$ npm test
- 정상적으로 실행되면 다음과 같이 테스트 통과 메시지가 터미널에 출력된다.

3️⃣ React Testing Library 및 JSDOM 설정하기
필요한 라이브러리 설치하기
- 아래의 명령을 실행하여 필요한 라이브러리를 설치한다.
$ npm install -D @testing-library/react @testing-library/jest-dom jsdom @testing-library/user-event
React Testing Library(RTL)
- 리액트 컴포넌트를 테스트하기 위한 라이브러리
- 사용자의 실제 상호작용과 유사한 방식으로 테스트를 수행한다. (사용자 관점의 테스트 지향)
- JSDOM을 활용하여 가상 브라우저 환경에서 테스트가 가능하다.
- Jest, Vitest 등의 테스트 프레임워크와 호환된다.
- 단독 실행을 할 수는 없으며, 반드시 테스트 러너가 필요하다.
- @queryBy@, @getBy@, @findBy@ 등의 메서드를 활용한 접근성이 개선되었다.
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import '@testing-library/jest-dom';
import MyComponent from './MyComponent';
test('renders a button and clicks it', async () => {
render(<MyComponent />);
const button = screen.getByRole('button', { name: /click me/i });
expect(button).toBeInTheDocument();
await userEvent.click(button);
expect(button).toHaveTextContent('Clicked');
});
JSDOM
- Node.js 환경에서 브라우저의 DOM을 시뮬레이션하는 라이브러리 (Node.js에서 가상 DOM 환경 제공)
- React Testing Library, Jest, Vitest와 같은 UI 테스트 도구가 브라우저 환경 없이 테스트를 수행할 수 있도록 해준다.
- DOM API 및 브라우저 이벤트를 시뮬레이션 할 수 있다.
import { JSDOM } from 'jsdom';
const dom = new JSDOM(`<html><body><p>Hello, world!</p></body></html>`);
console.log(dom.window.document.querySelector('p').textContent); // "Hello, world!"
@testing-library/user-event
- React Testing Library(RTL)에서 사용자 입력 및 이벤트 시뮬레이션을 보다 현실적으로 수행할 수 있도록 도와주는 라이브러리
- @fireEvent@보다 실제 브라우저에서 일어나는 이벤트 흐름을 더욱 직관적이고 정확하게 재현해준다.
- 비동기적인 이벤트(키 입력, 마우스 클릭 등)를 처리할 수 있다.
- React, Vue, Angular 등 다양한 프레임워크에서 사용할 수 있다.
Vite 설정 파일 변경하기
- Vite 설정 파일(@vite.config.ts@)에 아래의 내용을 추가해준다.
/vite.config.ts
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';
// https://vite.dev/config/
export default defineConfig({
plugins: [react()],
test: {
environment: 'jsdom',
globals: true,
setupFiles: './src/vitest.setup.ts'
}
});
Vitest 설정 파일 추가하기
- @/src@ 경로에 Vitest 설정 파일(@vitest.setup.ts@)을 생성하고, 아래의 내용을 입력해준다.
/src/vitest.setup.ts
import { expect, afterEach } from 'vitest';
import { cleanup } from '@testing-library/react';
import * as matchers from '@testing-library/jest-dom/matchers';
expect.extend(matchers);
afterEach(() => {
cleanup();
});
위의 코드는 각각의 테스트 실행 후 가상 DOM을 정리(Clean Up)하도록 해준다.
TypeScript 설정 파일 변경하기
- TypeScript 설정 파일(@tsconfig.app.json@)에 다음과 같은 내용을 추가한다.
{
// ...
"compilerOptions": {
"types": ["vitest/globals", "@testing-library/jest-dom"]
}
// ...
}
4️⃣ 리액트 컴포넌트 테스트해보기
테스트할 컴포넌트 생성하기
- @/src@ 경로에 테스트할 샘플 컴포넌트를 생성해본다.
/src/Random.tsx
const Random = () => {
return <div>Random</div>;
};
export default Random;
테스트 파일 생성하기
- @/src@ 경로에 @__tests__@ 폴더를 생성하고, 해당 폴더 안에 다음과 같은 테스트 파일을 생성한다.
/src/__tests__/Random.test.tsx
import { describe, test, expect } from 'vitest';
import { render, screen } from '@testing-library/react';
import Random from '../Random';
describe("Random Component", () => {
test("renders correctly", () => {
render(<Random />);
screen.debug();
// 컴포넌트 안에 random 문자(대소문자 고려 X)가 있는지 테스트하기
const element = screen.getByText(/random/i);
expect(element).toBeInTheDocument();
});
});
테스트 실행하기
- 아래의 명령을 실행하여 테스트를 수행해본다.
$ npm test
Vitest + React Testing Library(RTL) + JSDOM을 함께 사용하면 강력한 프론트엔드 테스트 환경을 구축할 수 있다.
참고 사이트
Vitest with React Testing Library In React(created with Vite)
Vitest is a replacer for the Jest testing library, especially for projects(in our case, React) created with Vite. Previously, React…
victorbruce82.medium.com
728x90
728x90
'DevOps > Testing' 카테고리의 다른 글
| [Testing] 소프트웨어 테스트 방법 (0) | 2025.02.15 |
|---|