Skip to content

테스트 환경 구축: apps/blog에 Jest 단위 테스트 + Playwright E2E 도입 #30

Description

@Malloc72P

배경

현재 apps/blog(Next.js 16 + MDX)에는 단위 테스트도, E2E 테스트도 전혀 없습니다. 테스트 설정 파일·의존성도 없는 상태라, 리팩터링이나 기능 추가 시 회귀(regression)를 잡아줄 안전망이 없습니다.

단위 테스트는 Jest, E2E는 Playwright로 구성하는 것을 목표로 합니다. (이 이슈는 작업 등록용이며, 당장 구현하지는 않습니다.)

목표

  • Jest 단위 테스트 환경 구축
  • Playwright E2E 테스트 환경 구축
  • 핵심 로직/주요 페이지에 대한 초기 테스트 작성
  • (선택) CI에서 PR마다 자동 실행

1. 단위 테스트 (Jest)

  • Next.js 공식 권장 방식인 next/jest로 설정(SWC 변환 활용). tsconfig의 path alias(@libs/* 등)를 moduleNameMapper에 반영
  • @testing-library/react, @testing-library/jest-dom, jest-environment-jsdom 도입
  • 스크립트 추가: test, test:watch, test:coverage
  • 우선순위 테스트 대상
    • 순수 로직(가치 가장 높음): src/libs/frontmatter.ts, src/libs/mapper.ts, src/libs/param-util.ts, src/libs/page-link-map.ts, src/libs/date-util/*
    • 컴포넌트 렌더링: post-card, tag-badge/series-badge/badge, divider, mdx-wrapper
  • MDX/mdx-components 관련 렌더 테스트 전략 결정(필요 시 일부 mock)

2. E2E 테스트 (Playwright)

  • @playwright/test 설치 + playwright.config.ts(webServernext dev/next start 자동 기동, baseURL 설정)
  • 스크립트 추가: test:e2e, test:e2e:ui
  • 시나리오(초기)
    • 메인 진입 시 헤더/푸터 렌더
    • 포스트 목록 → 상세 진입, 제목·작성일 노출 확인
    • 시리즈 페이지 / 태그 페이지 탐색
    • 모바일 사이드바·반응형 동작(최근 모바일 반응형 개선과 연계)
    • 존재하지 않는 경로(404)
  • 실패 시 스크린샷/trace 아티팩트 저장 설정

3. 모노레포 / CI

  • turbo.jsontest 태스크 등록(필요 시 test:e2e 분리)
  • (선택) GitHub Actions에서 PR마다 unit + e2e 실행, Playwright 브라우저 캐시 적용

완료 기준 (AC)

  • pnpm --filter blog test로 단위 테스트가 실행되고 통과
  • pnpm --filter blog test:e2e로 E2E가 로컬에서 통과
  • 핵심 libs 함수 단위 테스트 + 주요 사용자 흐름 1~2개 E2E가 존재
  • README/문서에 테스트 실행 방법 안내 추가

참고

  • 단위 테스트 작성 패턴은 최근 추가한 playground/jest-testing 예제와 frontend/jest-testing 포스트를 참고할 수 있습니다. 다만 그쪽은 순수 모듈용 babel 설정이고, 블로그는 Next.js + React + MDX 환경이라 next/jest(SWC) 기반으로 구성하는 것이 적합합니다.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions