RestoPromt

test-uret — Kaliteli Birim Test SKILL'i

SkillYazılım
RestoPromt16 Temmuz 2026

SKILL dosyası: .claude/skills/test-uret/SKILL.md olarak kaydet. Test yazarken önce mevcut test altyapısını keşfeder; davranış odaklı, kenar durumları kapsayan, AAA desenli testler üretir ve çalıştırıp doğrular.

---
name: test-uret
description: Test yazarken veya "şuna test yaz", "test coverage artır" istendiğinde kullanılır. Projenin mevcut test altyapısına uyan, davranış odaklı, kenar durumları kapsayan testler üretir ve çalıştırıp doğrular.
---

# Kaliteli Birim Test Üretimi

## 1. Önce keşfet, sonra yaz

- Test çatısını tespit et: package.json script'leri, vitest/jest/playwright
  config'i, pytest.ini vb.
- Mevcut bir test dosyası aç ve stilini kopyala: dosya adlandırma
  (`*.test.ts` / `*.spec.ts`), describe/it dili, yardımcılar, mock kütüphanesi.
- Projede test yardımcıları (factory, fixture, render helper) varsa
  kendi mock'unu yazmadan önce onları kullan.

## 2. Neyi test edeceğini seç

Öncelik sırası:
1. İş mantığı: hesaplama, doğrulama, dönüşüm fonksiyonları
2. Kenar durumlar: boş girdi, null/undefined, sınır değerler, hatalı tip
3. Hata yolları: istisna fırlatma, hata mesajı, geri dönüş davranışı
4. Regresyonlar: düzeltilen her bug için o bug'ı yakalayan bir test

Test ETME: framework'ün kendisini, basit getter/setter'ları,
implementasyon detayını (private fonksiyon sırası gibi).

## 3. Test yapısı — AAA deseni

```ts
it("indirim oranı %100'ü aşarsa hata fırlatır", () => {
  // Arrange — hazırlık
  const sepet = sepetOlustur({ toplam: 100 });
  // Act — eylem
  const sonuc = () => indirimUygula(sepet, 1.2);
  // Assert — doğrulama
  expect(sonuc).toThrow("Geçersiz indirim oranı");
});
```

Kurallar:
- Test adı DAVRANIŞI anlatır: "çalışır" değil, "boş listede sıfır döner".
- Her test tek bir davranışı doğrular; bir test kırılınca sebep belli olsun.
- Testler birbirinden bağımsız: sıra değişince kırılmamalı, paylaşılan
  mutable state olmamalı.
- Mock'u sınırda tut: ağ, saat, dosya sistemi mock'lanır; iş mantığı mock'lanmaz.
- Sabit zaman gerekiyorsa fake timer kullan; `Date.now()` ile yarışma.

## 4. Çalıştır ve doğrula

- Yazdığın testleri ÇALIŞTIR; çıktıyı görmeden "testler geçti" deme.
- Yeni test önce mevcut hatayı yakalıyor mu diye kontrol et
  (düzeltme öncesi kırmızı, sonrası yeşil olmalı).
- Kırılan test varsa nedenini açıkla; assert'i gevşeterek "geçirtme".

## Korkuluklar

- Snapshot testini davranış testi yerine koyma; bilinçli kullan.
- Coverage sayısı hedef değil sonuçtur; %100 için anlamsız test yazma.
- Flaky (bazen geçen) test bırakma: zamanlama/sıra bağımlılığını kökten çöz.

Değişiklik öner

Bu promptu yalnızca sahibi düzenleyebilir; ama sen bir iyileştirme önerebilirsin. Sahibi kabul ederse içerik güncellenir.

Öneri göndermek için giriş yap