테스트 가이드
테스트 도구
- Vitest — 단위 테스트
- Playwright — E2E 테스트
테스트 파일 위치
단위 테스트는 대상 파일 옆 test/ 폴더에 둡니다.
features/community/model/
├── transformCommunity.ts
└── test/
└── transformCommunity.test.ts
app/api/partners/
├── route.ts
└── test/
└── route.test.ts
테스트 대상
| 대상 | 테스트 여부 |
|---|---|
model/ 순수 함수 | ✅ 필수 |
shared/utils/ 유틸 | ✅ 필수 |
shared/model/ (오행·간지·만세력) | ✅ 필수 |
BFF route.ts | ✅ 권장 |
| UI 컴포넌트 | 선택 (중요 인터랙션만) |
단위 테스트 예시
// features/home/model/test/getGreeting.test.ts
import { describe, it, expect } from 'vitest';
import { getGreeting } from '../getGreeting';
describe('getGreeting', () => {
it('오전이면 아침 인사를 반환한다', () => {
expect(getGreeting(8)).toBe('좋은 아침이에요');
});
});
BFF Route 테스트
// app/api/partners/test/route.test.ts
import { describe, it, expect, vi } from 'vitest';
describe('POST /api/partners', () => {
it('Cross-Origin 요청을 거부한다', async () => {
const req = new Request('http://evil.com/api/partners', {
method: 'POST',
headers: { origin: 'http://evil.com' },
});
const res = await POST(req);
expect(res.status).toBe(403);
});
});
실행
# 단위 테스트
npm run test -w @saju/web
# E2E
npm run e2e -w @saju/web
Turnstile E2E
실제 Cloudflare Turnstile 위젯을 E2E에서 사용할 때는 프로덕션 키 대신 Cloudflare 테스트 키를 사용합니다.
예시 .env.e2e
NEXT_PUBLIC_TURNSTILE_SITE_KEY=1x00000000000000000000BB
TURNSTILE_SECRET_KEY=1x0000000000000000000000000000000AA
apps/web/playwright.config.ts는.env.e2e를 읽어 E2E 서버에 주입합니다.- Turnstile 관련 Playwright 실행은
localhost기준으로 맞추는 편이 안전합니다. 127.0.0.1와localhost를 섞으면 CSRF Origin 검증과 쿠키 기준이 어긋날 수 있습니다.
Turnstile 검증 범위
- 로그인 화면에서 invisible 위젯이 토큰을 발급하는지
/api/auth/turnstile-verify성공 후 카카오 로그인 시작으로 이어지는지/verify?returnTo=...페이지에서 재검증 후 원래 화면으로 복귀하는지- 보호 API가
TURNSTILE_REQUIRED를 주면 각 feature가/verify로 보내는지
추천 실행 예시
# 실제 Turnstile 위젯 검증
E2E_BASE_URL=http://localhost:3100 E2E_PORT=3100 \
npm run test:e2e -- e2e/auth-turnstile.spec.ts --project=chromium
# 보호 API 복구 흐름 검증
E2E_BASE_URL=http://localhost:3100 E2E_PORT=3100 \
npm run test:e2e -- e2e/auth-security.spec.ts e2e/community.spec.ts e2e/year-fortune.spec.ts --project=chromium