테스트 코드 프롬프트

프롬프트코딩테스트JestVitest

테스트 코드 작성을 위한 효과적인 프롬프트 패턴을 알아봅니다.


테스트 프롬프트 구조


단위 테스트

함수 테스트

다음 함수에 대한 단위 테스트를 작성해줘.

함수:
function calculateDiscount(price, discountRate) {
  // 구현
}

테스트 프레임워크: Jest

테스트 케이스:
- 정상 할인 계산
- 0% 할인
- 100% 할인
- 음수 가격 (에러)
- 잘못된 할인율 (에러)

AAA 패턴 (Arrange, Act, Assert) 사용

클래스 테스트

다음 클래스에 대한 테스트를 작성해줘.

클래스: ShoppingCart

메서드:
- addItem(product, quantity)
- removeItem(productId)
- getTotal()
- applyDiscount(code)

테스트 요구사항:
- 각 메서드별 테스트
- 엣지 케이스 포함
- Mock 사용 (할인 코드 검증)
- beforeEach로 초기화

비동기 함수 테스트

비동기 함수 테스트를 작성해줘.

함수:
async function fetchUserData(userId) {
  const response = await api.get(`/users/${userId}`);
  return response.data;
}

요구사항:
- API 호출 Mock
- 성공 케이스
- 실패 케이스 (404, 500)
- 타임아웃 처리
- async/await 사용

Mock과 Stub

API Mock

외부 API를 Mock하는 테스트를 작성해줘.

테스트 대상:
class PaymentService {
  async processPayment(orderId, amount) {
    const result = await this.paymentGateway.charge(amount);
    // ...
  }
}

Mock 대상: paymentGateway
테스트 케이스:
- 결제 성공
- 결제 실패
- 네트워크 에러
- 재시도 로직

Jest mock 함수 사용

데이터베이스 Mock

DB 연동 함수 테스트를 작성해줘.

함수:
async function createUser(userData) {
  const user = await db.users.create(userData);
  await sendWelcomeEmail(user.email);
  return user;
}

Mock 대상:
- db.users.create
- sendWelcomeEmail

검증:
- 올바른 데이터로 DB 호출
- 이메일 발송 호출
- 반환값 확인

통합 테스트

API 통합 테스트

REST API 통합 테스트를 작성해줘.

프레임워크: Jest + Supertest

엔드포인트: POST /api/users

테스트:
1. 정상 사용자 생성 - 201
2. 중복 이메일 - 409
3. 필수 필드 누락 - 400
4. 인증 없이 접근 - 401

요구사항:
- 테스트 DB 사용
- 각 테스트 전후 정리
- 응답 구조 검증

DB 통합 테스트

데이터베이스 통합 테스트를 작성해줘.

ORM: Prisma
DB: PostgreSQL (테스트용)

테스트 대상: UserRepository

테스트:
- create: 사용자 생성
- findById: 조회
- update: 수정
- delete: 삭제
- findByEmail: 이메일로 검색

설정:
- 테스트 전 마이그레이션
- 각 테스트 후 데이터 정리
- 트랜잭션 롤백 방식

E2E 테스트

Playwright 테스트

Playwright로 E2E 테스트를 작성해줘.

시나리오: 사용자 로그인 플로우

단계:
1. 로그인 페이지 이동
2. 이메일/비밀번호 입력
3. 로그인 버튼 클릭
4. 대시보드로 리다이렉트 확인
5. 사용자 이름 표시 확인

추가 테스트:
- 잘못된 비밀번호
- 빈 필드 제출
- 로그아웃

Page Object Model 패턴 사용

Cypress 테스트

Cypress로 장바구니 테스트를 작성해줘.

시나리오:
1. 상품 페이지 접속
2. 상품 장바구니에 추가
3. 장바구니 페이지로 이동
4. 수량 변경
5. 상품 삭제
6. 결제 페이지로 이동

요구사항:
- Custom commands 사용
- 네트워크 요청 가로채기
- 스크린샷 캡처
- 재사용 가능한 선택자

테스트 커버리지

커버리지 목표

다음 모듈의 테스트 커버리지를 높여줘.

모듈: AuthService

현재 커버리지: 60%
목표: 90%

누락된 테스트:
- 토큰 만료 처리
- 리프레시 토큰 갱신
- 동시 로그인 제한
- 비밀번호 재설정

각 케이스에 대한 테스트 작성

테스트 유틸리티

테스트 헬퍼

테스트용 유틸리티 함수들을 만들어줘.

필요한 헬퍼:
1. createMockUser() - 테스트 사용자 생성
2. createMockOrder() - 테스트 주문 생성
3. setupTestDB() - 테스트 DB 초기화
4. cleanupTestDB() - 테스트 데이터 정리

요구사항:
- faker.js로 랜덤 데이터
- 커스텀 옵션 오버라이드
- TypeScript 타입 지원

테스트 픽스처

테스트 픽스처를 생성해줘.

픽스처 종류:
- users.json - 테스트 사용자들
- products.json - 테스트 상품들
- orders.json - 테스트 주문들

포함:
- 다양한 상태 (active, inactive)
- 관계 데이터 연결
- 로드 함수

실전 프롬프트

전체 테스트 스위트

다음 서비스에 대한 전체 테스트를 작성해줘.

서비스: OrderService

메서드:
- createOrder(userId, items)
- cancelOrder(orderId)
- getOrderStatus(orderId)
- processRefund(orderId)

테스트 포함:
1. 단위 테스트 (각 메서드)
2. 통합 테스트 (DB 연동)
3. Mock 테스트 (결제 서비스)

커버리지 목표: 85%+

TDD 접근

TDD 방식으로 다음 기능을 개발해줘.

기능: 비밀번호 강도 검사기

요구사항:
- 최소 8자
- 대문자 포함
- 소문자 포함
- 숫자 포함
- 특수문자 포함

단계:
1. 실패하는 테스트 먼저
2. 최소한의 구현
3. 리팩토링
4. 반복

설명
테스트 대상 명시함수/클래스 코드 포함
케이스 나열정상/예외 케이스 목록
프레임워크 지정Jest, Vitest 등
Mock 대상외부 의존성 명시
패턴 요청AAA, Page Object 등

좋은 테스트는 좋은 코드의 기반입니다.

궁금한 점이 있으신가요?

협업·의뢰는 아래로, 가벼운 소통은 인스타그램 @bluefox._.hi도 환영이에요.