테스트 시스템 개요
Vitest
빠른 테스트 실행Vite 통합
Context 기반
인증 테스트권한 시뮬레이션
Transaction
자동 롤백격리된 테스트
Fixture 시스템
테스트 데이터재사용 가능
Vitest 설정
Sonamu 프로젝트의 테스트 환경은vitest.config.ts와 global.ts로 구성됩니다.
vitest.config.ts
Sonamu는getSonamuTestConfig() 함수를 제공하여 테스트 설정을 간편하게 구성할 수 있습니다.
api/vitest.config.ts
getSonamuTestConfig 옵션
getSonamuTestConfig()는 Vitest의 모든 옵션을 지원하며, Sonamu에 최적화된 기본값을 제공합니다.
global.ts 설정
global.ts는 모든 테스트 실행 전에 한 번 실행되는 전역 설정 파일입니다. Sonamu의 setup 함수를 export하여 테스트 환경을 초기화합니다.
api/src/testing/global.ts
export { setup } from "sonamu/test"는 sonamu.config.ts의 test 설정을 읽어 병렬 테스트 환경(다중 테스트 DB)을 자동으로 구성합니다.고급 설정 예시
커스텀 시퀀서나 리포터를 추가한 고급 설정 예시입니다.api/vitest.config.ts
bootstrap 함수
Sonamu는bootstrap 함수로 테스트 환경을 초기화합니다.
bootstrap의 역할
- Sonamu 초기화: 테스트 모드로 프레임워크 초기화
- Transaction 관리: 각 테스트마다 자동 롤백
- 타이머 리셋: Vitest의 fake timers 초기화
- 테스트 리포팅: Naite 시스템에 결과 전달
test 함수
Sonamu는 Vitest의test를 래핑한 커스텀 test 함수를 제공합니다.
기본 사용법
Context 주입
test 함수는 자동으로 Mock Context를 주입합니다.
Mock Context 전체 속성
Mock Context는 실제Context 타입(src/api/context.ts)을 만족하는 최소 값으로 구성됩니다. 실제 HTTP 요청에서 채워지는 request/reply는 Mock에서 사용되지 않습니다.
기본 속성
인증 관련
Naite 로그
Mock에서 비활성화되는 속성
Context 사용 예제
testAs에서의 Context
커스텀 Context 설정
특수한 경우 Mock Context의 가변 속성을 직접 수정할 수 있습니다:Context 속성 요약:
- 기본: transport, headers, locale
- 인증: user, session
- Naite: naiteStore
- HTTP 전용(Mock 비활성화): request, reply, createSSE
testAs 함수
특정 사용자로 인증된 상태에서 테스트할 수 있습니다.기본 사용법
권한 테스트
test.skip, test.only, test.todo
Vitest의 기능들을 그대로 사용할 수 있습니다.test.each
여러 입력값으로 동일한 테스트를 반복할 수 있습니다.Transaction 자동 롤백
각 테스트는 독립된 Transaction에서 실행되고 자동으로 롤백됩니다.- 테스트 간 격리
- 데이터 정리 불필요
- 빠른 실행 (실제 INSERT/DELETE 없음)
테스트 파일 구조
Context 접근
테스트 내에서 Context를 직접 사용할 수 있습니다.비동기 테스트
모든 테스트는async 함수여야 합니다.
주의사항
다음 단계
테스트 Scaffolding
자동 테스트 생성
테스트 헬퍼
Fixture와 유틸리티
Vitest 공식 문서
Vitest 가이드
Model System
Model 이해하기