🎭 Stubs, Spies, Clock & Fixtures

Stubs, Spies, Clock & Fixtures: cy.stub() bir fonksiyonun orijinal davranışını tamamen devre dışı bırakır ve senin söylediğin yanıtı döndürür — tıpkı uçuş simülatöründeki "motor

cy.stub() bir fonksiyonun orijinal davranışını tamamen devre dışı bırakır ve senin söylediğin yanıtı döndürür — tıpkı uçuş simülatöründeki "motor arızası" düğmesi gibi: gerçek motor çalışmaz, çalışmamalıdır da, ama pilotun tepkisini test etmek için tam olarak o senaryoya ihtiyacın var. cy.spy() ise davranışı değiştirmeden gözlemler — gerçek motor açık kalır ama kaç devir yaptığını, hangi parametreyle çalıştığını kayıt altına alırsın. Ama şunu sor kendine: cy.intercept() de ağ çağrılarını taklit ediyor — o varken neden cy.stub() da gerekli? Çünkü cy.intercept() yalnızca HTTP katmanını yakalar; uygulama içindeki bir analitik fonksiyonu, bir tarih API'sini veya dosya sistemi çağrısını taklit etmek için cy.stub() şarttır. Java'da bu Mockito'nun mock() ve spy() ayrımının birebir karşılığıdır: mock() tüm davranışı kontrol eder, spy() gerçek nesneyi sarar ve yalnızca seçili çağrıları izler. QA'nın gerçek iş riski şudur: ödeme servisini gerçekten çağıran bir test, her çalıştırmada canlı bir işlem yapar, para hareketi oluşabilir — cy.stub() ile ödeme gateway'ini saralmazsan CI pipeline'ında gerçek para kaybedebilirsin.

cy.stub(), bir fonksiyonun davranışını DEĞİŞTİRİR — gerçek kodu çalıştırmadan sahte bir cevap döndürür ya da hata fırlatır. cy.spy() ise fonksiyonun orijinal davranışını KORUR, sadece çağrıldığını ve hangi argümanlarla çağrıldığını izler. Bu ayrım Mockito'daki mock() vs spy() ayrımının birebir aynısıdır.

cy.stub() — sahte cevap / hata

Micro Lab: Cypress — API Intercept

TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.

cy.stub(), Gerçek Servisi Neden Tamamen Durduruyor?

cy.stub(paymentApi, "charge"), o…

`cy.stub(paymentApi, "charge")`, ödeme API'sinin charge fonksiyonunu YAKALAR — artık bu fonksiyon çağrılırsa gerçek kod çalışmaz, sen hangi yanıt döndürülmesi gerektiğini belirtirsin.

`.returns({ success: true })` istekli…

`.returns({ success: true })`, çağrı gerçekleşirse geri döndürülecek SAHTE cevabı tanımlar — canlı bir ödeme işlemi asla yapılmaz, test bunu test ortamıyla sınırlandırmış olur.

Alternatif: `.rejects(new Error(…))` hata…

`.rejects(new Error("Gateway timeout"))`, başarısız bir senaryo (network hatası, zaman aşımı) simüle etmek için kullanılır — gerçek servise hiç ulaşılmaksızın hata durumunu test etmeyi mümkün kılar.

cy.spy() — orijinal davranışı koru, çağrıyı izle

cy.spy(), Gerçek Fonksiyonu Çalıştırıp Çağrısını Neden Kaydediyor?