Snapshot Testi
- İ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
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.
İlgili sayfalar
- Birim TestiTest ve Kalite, s. 4Birim testi, bir fonksiyonun, metodun ya da sınıfın programın geri kalanından yalıtılmış olarak doğru davrandığını doğrulayan küçük ve otomatik bir kontroldür.
- Regresyon TestiTest ve Kalite, s. 21Regresyon testi, daha önce çalışan özelliklerin bozulmadığından emin olmak için bir kod değişikliğinden sonra mevcut testleri yeniden çalıştırma pratiğidir.
- ReactWeb Geliştirme, s. 37React, veri değişince otomatik güncellenen, yeniden kullanılabilir bileşenlerle kullanıcı arayüzü kurmaya yarayan açık kaynaklı JavaScript kütüphanesidir.
- SerileştirmeBackend ve API'ler, s. 42Serileştirme, bellekteki veri yapılarını JSON ya da bayt gibi bir biçime dönüştürme işlemidir; böylece veriler saklanabilir veya ağ üzerinden gönderilebilir.
- Code ReviewSürüm Kontrolü, s. 4Code review, kod değişikliklerinin birleştirilmeden önce başka geliştiricilerce incelenmesidir; hataları yakalar, kaliteyi artırır, bilgi paylaşımını sağlar.
- Flaky TestTest ve Kalite, s. 8Flaky test, koda hiçbir değişiklik yapılmadan bazen geçen bazen başarısız olan ve sonuçlarına güvenmeyi zorlaştıran otomatik bir testtir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin