π§ͺ λ¨μ ν μ€νΈ
β‘ Vitest κΈ°λ°
μ΄ νλ‘μ νΈλ Vitestβλ₯Ό ν μ€νΈ λ¬λλ‘ μ¬μ©ν©λλ€.
βοΈ Vitest μ€μ
κ³΅ν΅ ν
μ€νΈ μ€μ μ configs/vitest-config/configs
λλ ν 리 λ΄ μ¬λ¬ μ€μ νμΌλ‘ λΆλ¦¬λμ΄ κ΄λ¦¬λ©λλ€.
κ° ν¨ν€μ§/μ±μ νμμ λ°λΌ μ€μ νμΌμ νμ₯νκ±°λ μ‘°ν©νμ¬ μ¬μ©ν μ μμ΅λλ€.
-
base.ts
- Vitestμ κ°μ₯ κΈ°λ³Έμ μΈ μ€μ μ μ μνλ νμΌμ λλ€.
- ν μ€νΈ 컀λ²λ¦¬μ§ 리ν¬νΈ κ΄λ ¨ μ€μ λ±κ³Ό κ°μ΄
- λͺ¨λ ν¨ν€μ§/μ±μμ 곡ν΅μ μΌλ‘ μ μ©ν΄μΌ νλ μ΅μ μ ν¬ν¨ν©λλ€.
- λ€λ₯Έ νκ²½λ³ μ€μ νμΌ(
ui.ts
,node.ts
λ±)μ κΈ°λ°μ΄ λ©λλ€.
-
ui.ts
- React λ± UI νκ²½μμμ ν μ€νΈμ νΉνλ μ€μ νμΌμ λλ€.
- UI μ»΄ν¬λνΈ ν μ€νΈ μ€νμ μν΄ JSDOM νκ²½μ μ¬μ©νλλ‘ μ€μ λμ΄ μμ΅λλ€.
-
node.ts
- Node.js νκ²½μμμ ν μ€νΈμ νΉνλ μ€μ νμΌμ λλ€.
- Node νκ²½μμ μ€νλλ μ νΈλ¦¬ν°, μλ² μ½λ, CLI λ±μμ μ¬μ©νλ©°
- ν μ€νΈ νκ²½μ Nodeλ‘ μ§μ νκ³ , Node κ΄λ ¨ λͺ¨λ/κΈλ‘λ² κ°μ²΄λ₯Ό μ¬μ©ν μ μλλ‘ μ€μ ν©λλ€.
π ν΅ν© 컀λ²λ¦¬μ§
μ¬λ¬ ν¨ν€μ§/μ±μμ μμ±λ 컀λ²λ¦¬μ§ 리ν¬νΈλ₯Ό νλλ‘ λ³ν©νκΈ° μν΄
νλ‘μ νΈ λ£¨νΈμ package.json
κ³Ό configs/vitest-config/configs
ν¨ν€μ§μ κ΄λ ¨ λͺ
λ Ήμ΄μ μ€ν¬λ¦½νΈκ° μ μλμ΄ μμ΅λλ€.
-
collect-json-reports
- λͺ
λ Ήμ΄:
node dist/scripts/collect-json-outputs.js
- κ° ν¨ν€μ§/μ±μμ μμ±λ κ°λ³ 컀λ²λ¦¬μ§ JSON νμΌμ
coverage/raw
λλ ν λ¦¬λ‘ μμ§ν©λλ€. - μ€μ μμ§ λ‘μ§μ
configs/vitest-config/scripts/collect-json-output.ts
μ€ν¬λ¦½νΈμ ꡬνλμ΄ μμ΅λλ€. - μ΄ μ€ν¬λ¦½νΈλ glob ν¨ν΄μ νμ©ν΄ μν¬μ€νμ΄μ€ μ 체μμ 컀λ²λ¦¬μ§ νμΌμ μ°Ύμ ν κ³³μ λͺ¨μλλ€.
- λͺ
λ Ήμ΄:
-
merge-json-reports
- λͺ
λ Ήμ΄:
nyc merge coverage/raw coverage/merged/merged-coverage.json
- μμ§λ 컀λ²λ¦¬μ§ JSON νμΌλ€μ λ³ν©νμ¬
coverage/merged/merged-coverage.json
νμΌλ‘ λ§λλλ€.
- λͺ
λ Ήμ΄:
-
report
- λͺ
λ Ήμ΄:
nyc report -t coverage/merged --report-dir coverage/report --reporter=html --exclude-after-remap false
- λ³ν©λ 컀λ²λ¦¬μ§ κ²°κ³Όλ₯Ό λ°νμΌλ‘ HTML 컀λ²λ¦¬μ§ 리ν¬νΈλ₯Ό μμ±ν©λλ€.
- λͺ
λ Ήμ΄:
-
view-report
- λͺ
λ Ήμ΄:
open coverage/report/index.html
- μμ±λ HTML 컀λ²λ¦¬μ§ 리ν¬νΈλ₯Ό λΈλΌμ°μ λ‘ λ°λ‘ νμΈν μ μμ΅λλ€.
- λͺ
λ Ήμ΄:
π turbo νμ©
μ΄ νλ‘μ νΈλ λ³κ²½λ λΆλΆλ§ λΉ λ₯΄κ² ν μ€νΈνκ³ , λΆνμν μ€λ³΅ μ€νμ μ€μ΄κ³ μ Turboβλ₯Ό νμ©νμ¬ ν μ€νΈ μμ μ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ μ€νν©λλ€.
π§ͺ test
νμ€ν¬
turbo.json
μ test
taskλ λ€μκ³Ό κ°μ΄ ꡬμ±λμ΄ μμ΅λλ€:
- μμ‘΄μ±: κ° ν¨ν€μ§μ μμ ν¨ν€μ§(
^test
)μ@repo/vitest-config#build
μμ μ΄ λ¨Όμ μ€νλ©λλ€. - outputs: μλ νμΌλ€μ΄ ν
μ€νΈ μ€ν κ²°κ³Όλ‘ μμ±λμ΄ μΊμ λ° κ³΅μ λ©λλ€.
coverage.json
,apps/*/coverage.json
,packages/*/coverage.json
,configs/*/coverage.json
,shared/*/coverage.json
,tools/*/coverage.json
- μΊμ μ λ΅: Turboλ outputsμ λͺ μλ νμΌμ΄ λ³κ²½λμ§ μμΌλ©΄ μ΄μ ν μ€νΈ κ²°κ³Όλ₯Ό μ¬μ¬μ©νμ¬ μ€ν μλλ₯Ό λμ λλ€.
- λ³λ ¬ μ€ν: Turboλ μμ‘΄μ± κ·Έλνλ₯Ό λΆμνμ¬ κ°λ₯ν ν μ€νΈλ₯Ό λ³λ ¬λ‘ μ€νν©λλ€.
π merge-json-reports
νμ€ν¬
configs/vitest-config/turbo.json
μλ λ€μκ³Ό κ°μ 컀λ²λ¦¬μ§ 리ν¬νΈ ν΅ν©μ μλννλ νμ΄νλΌμΈμ΄ μ μλμ΄ μμ΅λλ€:
- collect-json-reports
- κ° ν¨ν€μ§μ 컀λ²λ¦¬μ§ κ²°κ³Όλ₯Ό ν κ³³(
coverage/raw/
)μ λͺ¨μλλ€.
- merge-json-reports
- μμ§λ 컀λ²λ¦¬μ§ νμΌμ λ³ν©νμ¬ ν΅ν© 컀λ²λ¦¬μ§ JSONμ μμ±ν©λλ€.
- report
- λ³ν©λ κ²°κ³Όλ‘ HTML 컀λ²λ¦¬μ§ 리ν¬νΈλ₯Ό λ§λλλ€.
- view-report
- 리ν¬νΈλ₯Ό λΈλΌμ°μ λ‘ μ½λλ€.
μ΄ κ³Όμ μ ν΅ν΄ λͺ¨λ Έλ ν¬ μ 체μ ν μ€νΈ 컀λ²λ¦¬μ§λ₯Ό μμ½κ² ν΅ν©Β·μκ°νν μ μμ΅λλ€.
π₯οΈ λ‘컬 νκ²½μμμ λ¨μ ν μ€νΈ
pnpm λͺ λ Ήμ΄
μ΄ νλ‘μ νΈμ λ¨μ ν
μ€νΈλ pnpm
μ μ¬μ©νμ¬ λ‘컬 νκ²½μμ μ€νν μ μμ΅λλ€.
λ€μ λͺ
λ Ήμ΄λ₯Ό ν΅ν΄ λͺ¨λ ν¨ν€μ§/μ±μ λ¨μ ν
μ€νΈλ₯Ό μ€νν μ μμ΅λλ€:
# 1ν μ€ν
pnpm run test
# watch λͺ¨λλ‘ μ€ννλ €λ©΄
pnpm run test:watch
# λ§μ§λ§μ μμ±λ ν΅ν© 컀λ²λ¦¬μ§ 리ν¬νΈλ₯Ό μΉ λΈλΌμ°μ λ‘ μ΄λ €λ©΄
pnpm run view-report
π€ GitHub Actions μμμ λ¨μ ν μ€νΈ
μ΄ νλ‘μ νΈμ λ¨μ ν
μ€νΈλ GitHub Actionsμ unit-test
μ‘μμ μλμΌλ‘ μ€νλ©λλ€.
μν¬νλ‘μ° κ°μ
μ΄ μν¬νλ‘μ°λ λ€μκ³Ό κ°μ μμ μ μνν©λλ€:
- π₯ μμ‘΄μ± μ€μΉ: pnpmμ μ¬μ©νμ¬ λͺ¨λ μν¬μ€νμ΄μ€μ μμ‘΄μ±μ μ€μΉν©λλ€.
- πΎ μΊμ νμ©: Turbo, node_modules, dist, 컀λ²λ¦¬μ§ λ± λ€μν μΊμλ₯Ό μ κ·Ήμ μΌλ‘ νμ©νμ¬ ν μ€νΈ μλλ₯Ό λμ λλ€.
- ποΈ νλ‘μ νΈ λΉλ: μ 체 νλ‘μ νΈλ₯Ό λΉλνκ³ , λΉλ λ‘κ·Έλ₯Ό μμ½ νμΌλ‘ μ μ₯ν©λλ€.
- π§ͺ λ¨μ ν μ€νΈ μ€ν: λͺ¨λ ν¨ν€μ§/μ±μ λ¨μ ν μ€νΈλ₯Ό μ€ννκ³ , ν μ€νΈ λ‘κ·Έλ₯Ό μμ½ νμΌλ‘ μ μ₯ν©λλ€.
- π 컀λ²λ¦¬μ§ 리ν¬νΈ μμ±: μ¬λ¬ ν¨ν€μ§μ 컀λ²λ¦¬μ§ κ²°κ³Όλ₯Ό λ³ν©νμ¬ ν΅ν© 컀λ²λ¦¬μ§ 리ν¬νΈλ₯Ό μμ±ν©λλ€.
- β¬οΈ μν°ν©νΈ μ λ‘λ: 컀λ²λ¦¬μ§ 리ν¬νΈ, λΉλ/ν μ€νΈ μμ½ λ‘κ·Έ λ± μ£Όμ κ²°κ³Όλ¬Όμ GitHub Actions μν°ν©νΈλ‘ μ λ‘λν©λλ€.
μ£Όμ λ¨κ³
κ° λ¨κ³λ λ€μκ³Ό κ°μ μμλ‘ μ€νλ©λλ€:
- πΎ Turbo/μμ‘΄μ±/λΉλ/ν μ€νΈ/컀λ²λ¦¬μ§ μΊμ 볡μ
- π₯ μμ‘΄μ± μ€μΉ
pnpm install --frozen-lockfile
- π νλ‘μ νΈ λΉλ
pnpm run build
- π§ͺ λ¨μ ν
μ€νΈ μ€ν
pnpm run test
- π 컀λ²λ¦¬μ§ 리ν¬νΈ λ³ν©
pnpm run merge-json-reports
- β¬οΈ μν°ν©νΈ μ
λ‘λ
- 컀λ²λ¦¬μ§ 리ν¬νΈ:
configs/vitest-config/coverage/merged
- λΉλ/ν μ€νΈ μμ½ λ‘κ·Έ
- 컀λ²λ¦¬μ§ 리ν¬νΈ:
π μ°Έκ³
- turbo μ€μ μ
turbo.json
νμΌμ μ°Έκ³ νμΈμ. - μμΈ μν¬νλ‘μ°λ
.github/workflows/test.yml
νμΌμunit-test
jobμ μ°Έκ³ νμΈμ. - ν μ€νΈ κ²°κ³Όλ¬Ό(컀λ²λ¦¬μ§, λ‘κ·Έ λ±)μ GitHub Actionsμ βArtifactsβμμ νμΈν μ μμ΅λλ€.