jtwjs Dev Wiki
  • DEV_ROAD
    • πŸ’ͺ🏻 μƒμ‘΄ν•˜κΈ°
    • Week 1
      • 개발 ν™˜κ²½ μ„ΈνŒ…
      • νƒ€μž…μŠ€ν¬λ¦½νŠΈ
      • λ¦¬μ—‘νŠΈ
      • Testing Library
      • Parcel & ESLint
    • Week 2
      • JSX
      • Virtual DOM
    • Week 3
      • React Component
      • React State
    • Week 4
      • Express
      • Fetch API & CORS
      • React Hook
      • useRef & Custom Hook
    • Week 5
      • TDD
      • React Testing Library
      • MSW
      • Playwrite
      • Snapshot
    • Week 6
      • Separtion of Concerns
      • Principle
      • DI, (Dependency Injection)
      • Reflect-metadata
      • TSyringe
      • External Store
      • Follow Redux
      • usestore-ts
      • useSyncExternalStore
    • Week 7
      • Routing
      • Routes
      • Router
      • Navigation
    • Week 8
      • Design System
      • Style Basics
      • CSS-in-JS
      • Styled-Components
      • Global Style & Theme
    • Week 9
      • κ°œλ°œν•˜κΈ° μ „ μ€€λΉ„
      • μƒν’ˆ λͺ©λ‘ νŽ˜μ΄μ§€
      • μƒν’ˆ 상세 νŽ˜μ΄μ§€
      • μž₯λ°”κ΅¬λ‹ˆ νŽ˜μ΄μ§€
    • Week 10
      • 둜그인
      • λ‘œκ·Έμ•„μ›ƒ
      • νšŒμ›κ°€μž…
      • μ£Όλ¬Έ λͺ©λ‘ & μ£Όλ¬Έ 상세
    • Week 11
      • 배솑 정보 μž…λ ₯
      • ν¬νŠΈμ› 결제 μš”μ²­
      • 배솑 및 결제 정보 전달
    • Week 12
      • κ΄€λ¦¬μž μ›Ήμ‚¬μ΄νŠΈκ°œλ°œμ‹œμž‘
  • DEV_NOTE
    • TypeScript
      • 기본적 문법
        • Enum
        • λ‹€ν˜•μ„±
          • Untitled
        • ꡬ쑰적 타이핑
        • μ œλ„ˆλ¦­ νƒ€μž…
        • 컨디셔널 νƒ€μž…
        • ν•¨μˆ˜ λ©”μ„œλ“œ 타이핑
        • infer둜 νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ μΆ”λ‘  직접 ν™œμš©
        • μž¬κ·€ νƒ€μž…
        • ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄ νƒ€μž…
        • 좔가적인 νƒ€μž… 검사 satisfies μ—°μ‚°μž
        • νƒ€μž…μŠ€ν¬λ¦½νŠΈ 건망증
        • μ›μ‹œ μžλ£Œν˜•μ—λ„ λΈŒλžœλ”© 기법 μ‚¬μš© κ°€λŠ₯
        • νƒ€μž… 쒁히기
        • μœ μš©ν•œ νƒ€μž… λ§Œλ“€κΈ°
        • λ°μ½”λ ˆμ΄ν„° ν•¨μˆ˜
        • μ•°λΉ„μ–ΈνŠΈ 선언도 μ„ μ–Έ 병합이 λœλ‹€.
        • μ•°λΉ„μ–ΈνŠΈ 선언도 선언병합이 λœλ‹€.
    • Testing
      • Unit Testing
      • λ‹¨μœ„ ν…ŒμŠ€νŠΈμ˜ 두 λΆ„νŒŒ
      • 쒋은 λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” 4λŒ€ μš”μ†Œ
      • ν…ŒμŠ€νŠΈ λŒ€μ—­κ³Ό 식별할 수 μžˆλŠ” λ™μž‘
      • λ‹¨μœ„ ν…ŒμŠ€νŠΈ μŠ€νƒ€μΌ
      • κ°€μΉ˜ μžˆλŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ λ¦¬νŒ©ν† λ§
      • 톡합 ν…ŒμŠ€νŠΈ
      • Cross Browsing Testing
      • κΈ°λŠ₯ ν…ŒμŠ€νŠΈ μ’…λ₯˜
      • React Testing Pattern
      • ν”„λ‘ νŠΈμ—”λ“œ ν…ŒμŠ€νŠΈ μž…λ¬Έ
        • ν…ŒμŠ€νŠΈ λ²”μœ„
        • λ‹¨μœ„ ν…ŒμŠ€νŠΈ 검증
        • Mock
        • UI μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈ
        • ν…ŒμŠ€νŠΈ 컀버리지
        • μ›Ή 톡합 ν…ŒμŠ€νŠΈ
        • MSW
        • μŠ€ν† λ¦¬λΆ
        • μ‹œκ°μ  νšŒκ·€ ν…ŒμŠ€νŠΈ
        • E2E ν…ŒμŠ€νŠΈ
        • Github Actions μ„€μ •
        • κΉƒν—ˆλΈŒ μ•‘μ…˜μ—μ„œ E2E
      • μ‹œν”„νŠΈ λ ˆν”„νŠΈ
        • ν…ŒμŠ€νŠΈ κΈ°λ³Έμ€‘μ˜ κΈ°λ³Έ
        • λ‹¨μœ„ ν…ŒμŠ€νŠΈ
        • μ½”λ“œ λ³΅μž‘λ„
        • λ¦¬νŒ©ν„°λ§
        • μ½”λ“œ 리뷰
        • 톡합 ν…ŒμŠ€νŠΈ νŒ¨ν„΄
        • μ‹œμŠ€ν…œ ν…ŒμŠ€νŠΈμ˜ μžλ™ν™”
        • 탐색적 ν…ŒμŠ€νŠΈ
      • Test Tip
      • vitest
      • playwright
      • Test Data Generator
      • MSW
    • Algorithm
      • coding test
      • Data Structure
    • Next.js
      • Data Fetching
      • Hydration
      • Next 13
      • Optimization
      • Next 15
    • Tailwind
      • Tailwind CSS
      • Theme
      • Directives
      • Tool
      • Design System
    • Storybook
      • Storybook
      • CSF3
      • CDD
      • Headless Component
    • Funtional Programming
      • ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°
      • μ°Έμ‘° 투λͺ…μ„±
      • λΆ€μˆ˜νš¨κ³Ό
      • ν•¨μˆ˜ ν•©μ„±
      • μ œλ„ˆλ¦­ νƒ€μž… ν™œμš©ν•˜κΈ°
      • 암묡적 μž…μΆœλ ₯
      • μ•‘μ…˜κ³Ό 계산, 데이터
      • κ³„μΈ΅ν˜• 섀계
      • 호좜 κ·Έλž˜ν”„
      • ν•¨μˆ˜ν˜• 섀계
      • λΆˆλ³€μ„±
      • 일급 ν•¨μˆ˜
      • ν•¨μˆ˜ν˜• 도ꡬ
    • Git
      • Github Actions
      • Conflict
      • Branch μ „λž΅
    • Contents Format
      • Audio
    • 3D Graphic
      • 3D keyword
      • Three.js
      • Geometry
      • Material
      • Light
      • Camera
      • Decal
      • Rotation
      • Text
      • Shadow
      • Fog
      • Post Processing
      • Animation
      • Math
        • Vector Space
        • λ²‘ν„°μ˜ μ—°μ‚°
        • νšŒμ „ 계산
      • 3D 컨텐츠가 λ§Œλ“€μ–΄μ§€λŠ” κ³Όμ •
      • R3F
      • Env
      • Scene
      • Transform
      • R3F
      • Interaction & Raycast
      • Rendering Algorithnm
      • Blender
      • Blender
    • Accessibility
      • μ ‘κ·Όμ„±μ΄λž€
    • Interactive Web
      • Parallax
      • Canvas
      • requestAnimationFrame
      • Effect
      • HSL
      • React.js + Canvas
      • Matter.js
    • AWS
      • DevOps
      • Amplify
      • S3
      • ν΄λΌμš°λ“œ μ»΄ν“¨νŒ…
        • μ˜¨ν”„λ ˆλ―ΈμŠ€μ™€ ν΄λΌμš°λ“œ
        • ν΄λΌμš°λ“œ λ„μž…νš¨κ³Ό
        • ν΄λΌμš°λ“œ μ»΄ν“¨νŒ…μ˜ λ²”μœ„
        • μ»΄ν“¨νŒ… μ˜΅μ…˜
          • EC2 - Virtual Machin
          • ECS, EKS - Container
          • Lambda - Serverless
        • λ„€νŠΈμ›Œν¬ 가상화
        • μŠ€ν† λ¦¬μ§€
        • λ°μ΄ν„°λ² μ΄μŠ€
        • 데이터 μˆ˜μ§‘
        • λ¨Έμ‹  λŸ¬λ‹ μ˜μ—­
        • IoT μ˜μ—­
        • 블둝체인 μ˜μ—­
      • ν΄λΌμš°λ“œ μ•„ν‚€ν…μ²˜ 섀계
    • Network
      • Web Server & WAS
    • System Design
      • System Design
      • Component
      • μ˜μ‘΄μ„±μ„ λ°°μ œν•œ 개발
      • Error Handling
      • Architecture
        • λͺ¨λ…Έλ‘œν‹± μ•„ν‚€ν…μ²˜
        • Clean Architecture
        • Layered Architecture
        • 이벀트 기반 μ•„ν‚€ν…μ²˜
      • 상황을 νŒŒμ•…ν•˜λŠ” 메타인지
      • 쀑볡 문제 ν•΄κ²°ν•˜κΈ°
      • Monorepo Arhitecture
        • λͺ¨λ…Έλ ˆν¬ 운영과 νŠΈλŸ¬λΈ”μŠˆνŒ…
        • Module Federation
      • μ½”λ“œ 병λͺ©μ§€μ 
      • API λŒ€μ‘
      • 곡톡 μ½”λ“œ
      • Infra ꡬ좕
      • λͺ¨λ“ˆ 기반의 개발 방식
      • Design System
        • μ΅œμ†Œ μˆ˜μ€€μ˜ μ•„ν‚€ν…μ²˜ μ„€μ •
        • 더 효율적인 λ””μžμΈμ‹œμŠ€ν…œ λ§Œλ“€κΈ°
        • λ””μžμΈ μ‹œμŠ€ν…œκ³Ό UI 라이브러리 λͺ©μ 
        • λ””μžμΈ 토큰
      • 효율적인 업무
        • 업무 ν”„λ‘œμ„ΈμŠ€ 병λͺ© νŒŒμ•…
      • Clean Code
      • Design Pattern
        • CQRS Pattern
        • Strangler Fig Pattern
        • λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄
        • μ»€λ§¨λ“œ νŒ¨ν„΄
        • μ „λž΅ νŒ¨ν„΄
        • μ˜΅μ €λ²„ νŒ¨ν„΄
      • A/B ν…ŒμŠ€νŒ…
      • λŒ€κ·œλͺ¨ λ¦¬μ—‘νŠΈ μ›Ήμ•± 개발
        • λ³΅μž‘μ„± 관리
        • λͺ¨λ“ˆμ„±
        • μ„±λŠ₯
        • λ””μžμΈ μ‹œμŠ€ν…œ
        • 데이터 패칭
        • μƒνƒœ 관리
        • κ΅­μ œν™”
        • μ½”λ“œ μ‘°μ§ν™”ν•˜κΈ°
        • κ°œμΈν™” A/B ν…ŒμŠ€νŒ…
        • ν™•μž₯ κ°€λŠ₯ν•œ μ›Ή μ•„ν‚€ν…μ²˜
        • ν…ŒμŠ€νŒ…
        • 툴링
        • 기술적 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜
        • νƒ€μž…μŠ€ν¬λ¦½νŠΈ
        • λΌμš°νŒ…
        • μ‚¬μš©μž 쀑심 API λ””μžμΈ
        • λ¦¬μ•‘νŠΈ 미래
    • Performance
      • React DevTools
      • Component μ΅œμ ν™”
      • Page Load
      • API
    • MFA
      • MSA
      • MFA λ„μž…ν•˜κΈ°
      • Monorepo
        • Monorepo Tool
        • Yarn Berry Workspace
        • Turborepo
      • MFA Composition
      • SPA 톡합
      • Design System
      • Package Manager
        • Yarn
        • pnpm
      • Transpiler & Bundler
        • Babel
        • Rollup
        • esbuild
        • swc
        • Webpack
        • Vite
      • 뢄해와 톡합을 μœ„ν•œ μ—¬λŸ¬ 기술 비ꡐ
    • State Management
      • Zustand
    • React v18
      • Automatic batching
      • Suspense
      • Transition
    • SEO
      • Search Engine Optimization
      • Open Graph Element
      • Metadata
    • FE Develop
      • Scrubbing
      • Clipboard
    • Refactoring
      • λ¦¬νŒ©ν† λ§ 깊게 듀여닀보기
      • κΈ΄ μ½”λ“œ 쑰각내기
      • νƒ€μž… μ½”λ“œ μ²˜λ¦¬ν•˜κΈ°
      • μœ μ‚¬ν•œ μ½”λ“œ μœ΅ν•©ν•˜κΈ°
      • 데이터 보호
      • μ½”λ“œ μΆ”κ°€ 및 제거
    • OAuth 2.0
    • Analytics
      • Mixpanel
    • ETC
      • VSCode
    • React Hook In Action
      • useContext & Provider
      • μ»€μŠ€ν…€ ν›…
      • μ½”λ“œ λΆ„ν• ν•˜κΈ° with Suspense, lazy
      • Suspense와 이미지 μ μž¬ν•˜κΈ°
      • useTransition, uesDeferredValue
      • SuspenseList
Powered by GitBook
On this page
  • TDDλž€?
  • TDD μˆœμ„œ
  • TDD 원칙
  • TDD μž₯점
  • TDD 단점
  • μ˜λ―ΈμžˆλŠ” ν…ŒμŠ€νŠΈ μž‘μ„±ν•˜κΈ°
  • ν…ŒμŠ€νŠΈ ν•΄μ•Όν•  것
  • ν…ŒμŠ€νŠΈν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” 것
  • Jest
  • Jest νŠΉμ§•
  • with Typescript
  • setupTests.ts
  • Coverage
  1. DEV_ROAD
  2. Week 5

TDD

PreviousWeek 5NextReact Testing Library

Last updated 1 year ago

TDDλž€?

Test-Driven-Development(ν…ŒμŠ€νŠΈ 주도 개발)둜 개발(μ½”λ“œ μž‘μ„±)전에 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ¨Όμ € μž‘μ„±ν•˜μ—¬ ν…ŒμŠ€νŠΈκ°€ κ°œλ°œμ„ μ΄λŒμ–΄ λ‚˜κ°€도둝 ν•˜λŠ” 방식

"ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ¨Όμ € μž‘μ„±ν•˜λŠ”, 즉 κ΅¬ν˜„λ³΄λ‹€ μΈν„°νŽ˜μ΄μŠ€μ™€ μŠ€νŽ™μ„ λ¨Όμ € μ •μ˜ν•¨μœΌλ‘œμ¨ κ°œλ°œμ„ μ§„ν–‰ν•˜λŠ” 방식이닀."

TDD μˆœμ„œ

Red(μ‹€νŒ¨) β†’ Green(성곡) β†’ Refactoring(λ¦¬νŒ©ν† λ§) 과정을 λ°˜λ³΅ν•˜λŠ” 사이클을 κ°–λŠ”λ‹€.

  1. κΈ°λŠ₯ μš”κ΅¬μ‚¬ν•­μ„ λ°”νƒ•μœΌλ‘œ ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±

  2. ν…ŒμŠ€νŠΈ μ½”λ“œ μ‹€ν–‰ (Fail) β†’ 아직 κ΅¬ν˜„μ²΄κ°€ μ—†μœΌλ―€λ‘œ λ‹Ήμ—°νžˆ μ‹€νŒ¨

  3. μž‘μ„±λœ ν…ŒμŠ€νŠΈκ°€ 톡과할 수 μžˆλ„λ‘ κ°„λ‹¨ν•œ μƒ˜ν”Œ μ½”λ“œ μž‘μ„±

  4. ν…ŒμŠ€νŠΈ μ½”λ“œ μ‹€ν–‰ (Success)

  5. 3, 4번 단계λ₯Ό λ°˜λ³΅ν•˜λ©° μ½”λ“œλ₯Ό 개발

  6. μž‘μ„±ν•œ ν…ŒμŠ€νŠΈλ₯Ό 기반으둜 μ½”λ“œλ₯Ό μ•ˆμ „ν•˜κ²Œ λ¦¬νŒ©ν† λ§

μž‘μ€ 단계λ₯Ό μ°Ύκ³ , μ½”λ“œμ—μ„œ ν”Όλ“œλ°±μ„ μ–»λŠ”κ²Œ μ€‘μš”ν•˜λ‹€. 3번이 μ–΄λ ΅λ‹€λ©΄ 1번으둜 λŒμ•„κ°€μ„œ 더 μž‘κ³  μ‰¬μš΄ 문제λ₯Ό μ •μ˜ν•˜κ³ , 6λ²ˆμ„ μœ„ν•΄ μ˜λ„λ₯Ό λ“œλŸ¬λ‚΄κ³  쀑볡을 μ°Ύμ•„ μ œκ±°ν•˜λŠ” μ—°μŠ΅μ„ ν•΄μ•Ό ν•œλ‹€. 이 λ‘˜μ„ μ΅νžˆμ§€ μ•ŠμœΌλ©΄ TDDλ₯Ό ν•˜λŠ”κ²Œ 거의 λΆˆκ°€λŠ₯,

TDD 원칙

  • μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜λΌ β†’ 즉, 미리 κ΅¬ν˜„ν•˜μ§€λ§κ³  ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±(μš”κ΅¬μ‚¬ν•­ 뢄석)ν•œ 후에 κΈ°λŠ₯을 κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.

  • ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 만큼의 μ½”λ“œλ§Œ μž‘μ„±ν•˜λΌ β†’ λ―Έλž˜μ— ν•„μš”ν• κ²ƒ 같은 κ΅¬ν˜„μ„ μ§€λ ˆμ§μž‘ν•˜μ—¬ λΆˆν•„μš”ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” μ˜€λ²„μ—”μ§€λ‹ˆμ–΄λ§μ„ λ°©μ§€ν•œλ‹€.()

  • κ°€μž₯ κ°„λ‹¨ν•œ λ¬Έμ œλΆ€ν„° κ΅¬ν˜„ν•˜λΌ β†’ κ°„λ‹¨ν•œ κΈ°λŠ₯λΆ€ν„° μ°¨κ·Όμ°¨κ·Ό κ΅¬ν˜„ν•˜λ©° 전체적인 κΈ°λŠ₯을 μ™„μ„±ν•΄ λ‚˜κ°€λŠ” 것이 μ€‘μš”

  • μ½”λ“œ 컀버리지 100%λ₯Ό λͺ©ν‘œλ‘œ ν•˜μ§€ 말라 β†’ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  μ½”λ“œλ₯Ό κ²€μ¦ν•˜λŠ” 것이 λͺ©μ μ΄ λ˜μ–΄μ•Ό ν•œλ‹€

TDD μž₯점

  • ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•΄μ„œλŠ” μš”κ΅¬μ‚¬ν•­μ„ λ¨Όμ € 뢄석해야 ν•˜λ―€λ‘œ λͺ¨λ“  μš”κ΅¬μ‚¬ν•­(λͺ©ν‘œ)에 λŒ€ν•΄ μ΄ν•΄ν•˜κ³  μ κ²€ν•˜λŠ” μ‹œκ°„μ„ κ°–κ²Œ λœλ‹€.

  • μ˜ˆμ™Έ μΌ€μ΄μŠ€λ₯Ό 미리 κ³ λ―Όν•˜κ³  μ •λ¦¬ν•˜λŠ” 과정을 톡해 버그가 μƒκΈ°λŠ” 것을 사전에 λ°©μ§€ ν•  수 μžˆλ‹€.

  • ν…ŒμŠ€νŠΈκ°€ μ‰¬μš΄ μ½”λ“œλ₯Ό μž‘μ„±ν•¨μœΌλ‘œμ¨ μ‚¬μš©μž μž…μž₯μ—μ„œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.

    • μΈν„°νŽ˜μ΄μŠ€ μœ„μ£Όμ˜ μ½”λ“œ μž‘μ„±

    • μ‹œμŠ€ν…œ μ „λ°˜μ μΈ 섀계 ν–₯상

    • 개발 집쀑λ ₯ ν–₯상

  • 섀계에 λŒ€ν•œ ν”Όλ“œλ°±μ΄ λΉ λ₯΄λ‹€.

  • κ°œλ°œμ— μžμ‹ κ°μ΄ 생긴닀

TDD 단점

  • TDDλŠ” μƒˆλ‘œμš΄ κ°œλ… 및 ν”„λ‘œμ„ΈμŠ€λ₯Ό λ°°μ›Œμ•Όν•˜λ―€λ‘œ ν•™μŠ΅ 곑선이 높을 수 μžˆλ‹€.

  • ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„± 및 μ‹€ν–‰ν•˜λŠ” μ‹œκ°„, μœ μ§€λ³΄μˆ˜ μ‹œκ°„ λ“±μ˜ 뢀가적인 μ‹œκ°„μ΄ ν•„μš”ν•˜λ―€λ‘œ 전체 개발 μ‹œκ°„μ΄ 증가할 수 μžˆλ‹€.

μ˜λ―ΈμžˆλŠ” ν…ŒμŠ€νŠΈ μž‘μ„±ν•˜κΈ°

ν…ŒμŠ€νŠΈ ν•΄μ•Όν•  것

κΈ°λŠ₯ ν…ŒμŠ€νŠΈμ— μ΄ˆμ μ„ λ§žμΆ”κ³ , μ‚¬μš©μž κ΄€μ μ˜ μœ μ €ν”Œλ‘œμš°λ₯Ό 톡해 μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈ

  • μ‚¬μš©μž μš”κ΅¬μ‚¬ν•­μ΄ λͺ¨λ‘ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ν™” λ˜μ—ˆλŠ”μ§€

  • 정상적인 μž…λ ₯값이 λ“€μ–΄μ˜¨ 경우 μ–΄λ–»κ²Œ μ‘λ‹΅ν•˜λŠ”μ§€

  • 정상적이지 μ•Šμ€ μž…λ ₯이 λ“€μ–΄μ˜¨ 경우(μ—£μ§€μΌ€μ΄μŠ€) μ–΄λ–»κ²Œ μ‘λ‹΅ν•˜λŠ”μ§€

ν…ŒμŠ€νŠΈν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” 것

λ‹¨μˆœνžˆ ν…ŒμŠ€νŠΈ 컀버리지λ₯Ό λ†’νžˆκΈ° μœ„ν•΄ λͺ¨λ“  라인을 ν…ŒμŠ€νŠΈλ₯Ό ν•˜λŠ” 건 λ‚­λΉ„λ‹€.

  • κΈ°λŠ₯이 λ‹¨μˆœν•œ 것

  • UI와 κ΄€λ ¨λœ ν…ŒμŠ€νŠΈ

Jest

μžλ°”μŠ€ν¬λ¦½νŠΈ ν™˜κ²½ ν…ŒμŠ€νŠΈ 도ꡬ

npm i -D jest @types/jest @swc/core @swc/jest \
  jest-environment-jsdom \
  @testing-library/react @testing-library/jest-dom

Jest νŠΉμ§•

Test Runner & Assertion 톡합 라이브러리

  • Zero config: λ³΅μž‘ν•œ 섀정이 μ—†λ‹€.

  • Snapshots 제곡: μ–΄λ– ν•œ 였브젝트 λ˜λŠ” ν˜„μž¬μ˜ μƒνƒœλ₯Ό 캑쳐할 수 μžˆλŠ” κΈ°λŠ₯

  • Isolated: 독립적이라 ν…ŒμŠ€νŠΈ μˆ˜ν–‰ν•˜λŠ” μ†λ„λ‚˜ μ„±λŠ₯이 뛰어남

  • Great API: λ‹€μ–‘ν•œ ν…ŒμŠ€νŠΈ api 제곡

Test Runner β†’ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ ν›„ κ²°κ³Ό 생성

Assertion β†’ ν…ŒμŠ€νŠΈ 쑰건, 비ꡐλ₯Ό ν†΅ν•œ ν…ŒμŠ€νŠΈ 둜직 검증

with Typescript

typescript(swc)와 같이 μ‚¬μš©ν•˜λ €λ©΄ μ•„λž˜ μ½”λ“œμ™€ 같이 μΆ”κ°€ 섀정이 ν•„μš”ν•˜λ‹€

// jest.config.js
module.exports = {
  testEnvironment: 'jsdom',
  setupFilesAfterEnv: [
    '@testing-library/jest-dom/extend-expect',
  ],
  transform: {
    '^.+\\.(t|j)sx?$': ['@swc/jest', {
      jsc: {
        parser: {
          syntax: 'typescript',	
          jsx: true,
          decorators: true,
          },
        transform: {	
          react: {
            runtime: 'automatic',
          },
        },
      },
    }],
  },
};

BDD μŠ€νƒ€μΌ ν…ŒμŠ€νŠΈ μ½”λ“œ μƒ˜ν”Œ

BDD μŠ€νƒ€μΌ β†’ λŒ€μƒ-ν–‰μœ„ μ€‘μ‹¬μœΌλ‘œ ν…ŒμŠ€νŠΈλ₯Ό μ‘°μ§ν™”ν•˜λŠ” 방식.

describe('add', () => {
  context('with no argument', () => {
    it('return zero', () => {
      expect(add()).toBe(0);
    });
  });
  
  context('with only one argument', () => {
    it('return the same number', () => {
      expect(add(1)).toBe(1);
    });
  });

  context('with only two argument', () => {
    it('return the sum of two numbers', () => {
      expect(add(1, 2)).toBe(3);
    });
  });

  context('with only three argument', () => {
    it('return the sum of three numbers', () => {
      expect(add(1, 2, 3)).toBe(6);
    });
  });

  context('with mutliple argument', () => {
    it('return the sum of them numbers', () => {
      expect(add(1, 2, 3, 4, 5, 7, 8, 9, 0)).toBe(39);
    });
  });
});

setupTests.ts

ν…ŒμŠ€νŠΈ ν™˜κ²½μ—μ„œ ν•΄λ‹Ή 파일의 μ½”λ“œλ₯Ό λͺ¨λ“  ν…ŒμŠ€νŠΈ νŒŒμΌμ— ν¬ν•¨μ‹œν‚€λŠ” 역할을 ν•œλ‹€.

μ½”λ“œμ˜ 쀑볡을 ν”Όν•˜κ³  κΉ”λ”ν•˜κ²Œ μœ μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

Coverage

νŠΉμ • ν…ŒμŠ€νŠΈμ˜ 컀버리지 μ§€ν‘œ ν™•μΈν•˜κΈ°

npm test -- --testMatch="<rootDir>/src/[ν…ŒμŠ€νŠΈ 파일]" --collectCoverage --collectCoverageFrom="[ν…ŒμŠ€νŠΈ λŒ€μƒ]"
YAGNI 원칙