vitest은(는) 무엇을 하나요?
Vite 기반의 빠른 단위 테스트 프레임워크인 Vitest로, Jest 호환 API를 제공합니다. 테스트 작성, 모킹, 커버리지 설정, 테스트 필터링 및 픽스처 작업 시 사용하세요.
주요 특징
- 초고속 실행: Vite의 네이티브 ESM 및 HMR을 활용하여 테스트를 빠르게 실행합니다.
- Jest 호환 API:
describe,it,expect등 Jest 구문을 그대로 사용할 수 있어 학습 곡선이 낮습니다. - 내장 모킹:
vi.mock(),vi.spyOn()등 강력한 모킹 기능을 제공합니다. - 커버리지 지원: c8, istanbul 등 다양한 커버리지 제공자와 통합됩니다.
- 테스트 필터링: 이름, 파일 패턴, 태그 등으로 테스트를 필터링할 수 있습니다.
- 픽스처: 재사용 가능한 테스트 픽스처를 쉽게 정의하고 관리할 수 있습니다.
설치
npm install -D vitest
기본 사용법
테스트 파일 작성
import { describe, it, expect } from 'vitest'
describe('계산기', () => {
it('두 숫자를 더한다', () => {
expect(1 + 2).toBe(3)
})
it('두 숫자를 뺀다', () => {
expect(5 - 3).toBe(2)
})
})
실행
npx vitest
설정
vitest.config.ts 파일에서 설정을 관리합니다:
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
globals: true,
environment: 'node',
coverage: {
provider: 'v8',
reporter: ['text', 'json', 'html'],
},
},
})
모킹
함수 모킹
import { vi, it, expect } from 'vitest'
const mockFn = vi.fn()
mockFn('hello')
expect(mockFn).toHaveBeenCalledWith('hello')
모듈 모킹
import { vi } from 'vitest'
vi.mock('../database', () => ({
fetchUser: vi.fn(() => ({ name: '테스트 사용자' })),
}))
테스트 필터링
# 이름으로 필터링
npx vitest --testNamePattern "계산기"
# 파일 패턴으로 필터링
npx vitest ./tests/unit/
픽스처
import { beforeAll, afterAll, it, expect } from 'vitest'
let db: Database
beforeAll(async () => {
db = await createDatabase()
})
afterAll(async () => {
await db.close()
})
it('데이터를 저장한다', async () => {
await db.save({ id: 1, name: '항목' })
const result = await db.find(1)
expect(result).toEqual({ id: 1, name: '항목' })
})