Projenin omurgası Test-Driven Development’tır. Her davranış değişikliği önce başarısız bir test ile yazılır. Üç farklı test ortamı (jsdom + node + workerd) + Playwright E2E, CI’da her push’ta koşar. Biome hem lint hem format olarak tek araçta disiplin sağlar.
Test-Driven Development
Projede demir kural: Üretim koduna dokunmadan önce başarısız bir test yazılır.
flowchart LR
R[RED<br/>Başarısız test yaz] --> V1[Doğru nedenden fail ettiğini doğrula]
V1 --> G[GREEN<br/>Minimum kod ile geçir]
G --> V2[Tüm test suite'i yeşil]
V2 --> RF[REFACTOR<br/>Davranışı değiştirmeden temizle]
RF --> R
Kural kapsamı
Yeni özellikler
Hata düzeltmeleri (önce hatayı repro eden test, sonra fix)
Mevcut kodda davranış değişiklikleri
İstisna: saf yapılandırma düzenlemeleri, atılabilecek prototipler.
Test Altyapısı
Vitest Workspaces — Üç Ortam Bir Komut
Proje
Ortam
Test hedefi
frontend
jsdom
React bileşenleri ve sayfalar
node
node
Paylaşılan yardımcılar ve doğrulamalar
backend
@cloudflare/vitest-pool-workers → gerçek workerd
Hono route’ları ve servisler
Backend testleri gerçek Cloudflare runtime’ında koşar — production ile %99 eşdeğer.
E2E — Playwright
Gerçek tarayıcıda kritik akışlar
Stublanmış backend (stubBackend() fixture’ı)
Asla gerçek upstream’e dokunmaz
Yeniden Kullanılabilir Helper’lar
tests/helpers/ altında:
renderWithProviders() — Router + Context ile React render
Conventional-ish, imperative İngilizce commit mesajları.
.only / .skip komitlenmez.
.env veya keystore asla commitlenmez.
Kısa ömürlü branch’ler; rebase dostu.
Gözden Geçirme Kapıları
"Push etmeden önce" hızlı kontrol
devbox run typecheckdevbox run testdevbox run lintdevbox run test:e2e # UI veya API değiştiyse
CI bu kapıları raporlar ama bloklamaz — sorumluluk geliştiricide.
Kapsama (Coverage)
V8 kapsama raporu frontend + node projeleri için.
Backend (workerd) kapsama V8’in node:inspector ihtiyacı nedeniyle kapalı; doğrulama, detaylı assertion’larla sağlanır.
Rapor: coverage/ altında HTML + lcov + json-summary.
Doküman Olarak Test
Bu projede testler canlı belgedir:
Bir özelliğin nasıl kullanılacağını görmek için → teste bak.
Bir API’nin yanıt şeklini görmek için → teste bak.
Sharp edge’leri hatırlamak için → teste bak.
Örnek — Hata Düzeltme Akışı
Bir rate limit hatası rapor edildiğinde:
# 1. RED — hatayı repro eden testdevbox run test:backend# (fail)# 2. GREEN — minimum düzeltme# backend/src/routes/feedback.ts# 3. VERIFYdevbox run test:backend && devbox run typecheck# 4. Commit
Test hatayı yakalar, fix test’i geçirir, bir daha bu regresyon olmaz.