🗂️ Test Yazma & Organizasyon
Test Yazma & Organizasyon: describe() ve it() bloklarının yapısını bir hukuki belge hiyerarşisi gibi düşün: describe() dava dosyasının başlığıdır (davranış kapsamını tanımlar), i
describe() ve it() bloklarının yapısını bir hukuki belge hiyerarşisi gibi düşün: describe() dava dosyasının başlığıdır (davranış kapsamını tanımlar), it() ise tek bir iddia — mahkemede "sanık X tarihinde Y yaptı" gibi, kesin ve bağımsız, diğer iddiaların doğruluğuna bakılmaksızın değerlendirilebilir. Ama şunu sor kendine: before() ve beforeEach() ikisi de kurulum yapıyorsa, Cypress neden ikisini birden tanımlamış — biri neden yetmiyor? before() dava başlamadan tüm dosyayı bir kez hazırlar (veritabanı seed'i gibi); beforeEach() ise her iddia okunmadan önce masayı siler ve tazeleyerek başlar — yani testlerin birbiri üzerinde yan etki bırakıp bırakmadığını bu ayrım kontrol eder. Java'da JUnit'in @BeforeAll / @BeforeEach ayrımının birebir karşılığıdır, yalnızca adlar farklıdır. QA'nın gerçek iş riski şudur: beforeEach() olmadan çalışan bir test suite'i, testlerin çalışma sırasına bağımlı hale gelir — sıra değiştiğinde PASS olan testler FAIL olmaya başlar, flaky kabul edilen ama aslında düzensiz test izolasyonundan kaynaklanan bir "hantu" (phantom failure) ortaya çıkar.
Cypress, test yapısı için Mocha'nın describe/context/it arayüzünü kullanır. describe() ve context() birebir aynıdır, sadece okunabilirlik için ikisi de vardır. Her it() (veya specify()) bağımsız bir test senaryosudur — Cypress'in resmi dokümantasyonu da "her test bağımsız çalışabilmeli" kuralını aynı cümleyle vurgular.
describe / it / 4 Hook
Micro Lab: Cypress — Komut zinciri
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
.only ve .skip — geliştirme sırasında odaklanma
Adim Adim: Cypress — Komut zinciri
cy.get(locator) ile hedef elementi se
Aksiyon komutunu zincirle: .click() / .type("metin") / .select("secenek")
Cypress otomatik retry yapar — 4s icinde komut basarili olmassa fail eder
.should("have.value", "metin") ile DOM degisikligini dogrula
Ayni zinciri CI'da farkli viewport'ta da calistir, responsive kontrol et
Cypress ile UI etkilesimi ve dogrulama sirasi nedir?
Custom Command — Cypress.Commands.add()