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 |
---|