# Snapshot Testi

Adres: https://softwaredictionary.org/tr/terimler/snapshot-testing
Kategori: Test ve Kalite
Son güncelleme: 2026-09-30
İngilizcesi: Snapshot Testing
Okunuşu: snepşat testing

Kısaca: Snapshot testi, kodun çıktısını ilk çalıştırmada bir dosyaya kaydeden ve sonraki çalıştırmalarda çıktı bu kopyayla eşleşmezse başarısız olan bir tekniktir.

## Snapshot testi nedir?

Snapshot testi, render edilmiş HTML, bir UI bileşeni, bir JSON yanıtı ya da bir komut satırı mesajı gibi bir çıktının beklenmedik biçimde değişmediğini kontrol eder. Test ilk kez çalıştığında çıktıyı, depoya commit edilen bir snapshot dosyasına kaydeder. Sonraki her çalıştırma çıktıyı yeniden üretir ve kayıtlı snapshot ile karşılaştırır; herhangi bir fark testi başarısız kılar.

Bir snapshot testi başarısız olduğunda geliştirici, diff adı verilen farkı inceler. Değişiklik bir hataysa kodu düzeltir; değişiklik bilerek yapıldıysa genellikle tek bir komutla snapshot'ı günceller ve gözden geçirenlerin tam olarak neyin değiştiğini görebilmesi için yeni sürümü commit eder. Pek çok JavaScript test çalıştırıcısında bu, `toMatchSnapshot()` gibi tek bir doğrulamadır ve bazıları küçük snapshot'ları test dosyasının içinde satır içi (inline) saklayabilir.

Bitmiş bir odanın fotoğrafını çekip daha sonra yerinden oynayan bir şeyi fark edebilmeye benzer. Snapshot testleri, her öğe için tek tek doğrulama yazmanın zahmetli olacağı ön yüz UI bileşenlerinde popülerdir. Çıktının büyük ama kararlı kalması gereken serileştiricilere, derleyicilere, kod üreteçlerine ve API yanıtlarına da uygundurlar.

Snapshot testi, gerçek ekran görüntülerini piksel piksel karşılaştıran görsel regresyon testiyle aynı şey değildir; tipik bir snapshot, serileştirilmiş işaretleme gibi metin temsilini saklar. Başlıca tuzak körü körüne güncellemedir: snapshot'lar çok büyükse ya da sık değişiyorsa geliştiriciler her farkı okumadan kabul etmeye başlar ve testler hata yakalamayı bırakır. Zaman damgaları ya da rastgele kimlikler gibi her çalıştırmada değişen değerler sabit olanlarla değiştirilmelidir; aksi hâlde snapshot hiçbir zaman eşleşmez.

## Önemli noktalar

- Snapshot testi, mevcut çıktıyı kaydedilmiş ve commit edilmiş bir kopyayla karşılaştırır.
- İlk çalıştırma snapshot'ı oluşturur; çıktı farklıysa sonraki çalıştırmalar başarısız olur.
- Bilinçli değişiklikler snapshot güncellenip commit edilerek kabul edilir.
- UI işaretlemesi, serileştirilmiş veri ve üretilmiş kod gibi büyük ve kararlı çıktılara uygundur.
- Büyük veya sık değişen snapshot'lar körü körüne güncellemelere ve zayıf testlere yol açar.

## Örnek: Node.js'in yerleşik test çalıştırıcısıyla bir snapshot testi

```javascript
import { test } from "node:test";

function renderBadge(user) {
  return '<span class="badge">' + user.name + " (" + user.role + ")</span>";
}

test("renders a user badge", (t) => {
  // Run once with: node --test --test-update-snapshots
  // That saves the output to a snapshot file; later runs fail if it changes.
  t.assert.snapshot(renderBadge({ name: "Ada", role: "admin" }));
});
```

## Sık sorulan sorular

**Bir snapshot ne zaman güncellenmelidir?**

Yalnızca farkı okuyup yeni çıktının değişikliğinizin amaçlanan sonucu olduğunu doğruladıktan sonra. Bir snapshot'ın neden değiştiğini açıklayamıyorsanız başarısızlığı olası bir hata olarak değerlendirin.

**Snapshot testi ile görsel regresyon testi arasındaki fark nedir?**

Snapshot testi genellikle serileştirilmiş HTML ya da JSON gibi çıktının metin sürümünü karşılaştırır. Görsel regresyon testi ise bir tarayıcıda gerçek ekran görüntüleri alır ve bunları piksel piksel karşılaştırır; böylece metin snapshot'larının kaçırdığı stil sorunlarını yakalar.

**Snapshot dosyaları sürüm kontrolüne commit edilmeli mi?**

Evet. Snapshot'lar testlerinizin beklenen sonuçlarıdır; bu yüzden depoda bulunmalı ve pull request'lerde diğer değişiklikler gibi incelenmelidir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
