Tarih & Zaman (Date)

Tarih & Zaman (Date): JavaScript Date — Takvim + Kronometre JavaScript'te Date nesnesi bir takvim + saat kombinasyonudur.

JavaScript Date — Takvim + Kronometre

JavaScript'te Date nesnesi bir takvim + saat kombinasyonudur. Test otomasyonunda tarihlerle çok işimiz var: raporlardaki timestamp'leri doğrularız, 'son 30 gün içinde kayıt olan kullanıcı' gibi filtreleri test ederiz, token son kullanma tarihlerini kontrol ederiz. Java'daki `LocalDateTime` veya `Calendar` neyse burada `Date` o. Ama şu soruyu sor: tarih testi neden bu kadar sık kırılır — takvim herkes için aynı değil mi? Değil, ve sebebi `Date`'in bir takvimden çok bir **zaman damgası + görüntüleme tercihi** olmasıdır. Aynı an, testi koşturan makinenin saat diliminde farklı bir tarih olarak yazılır: sunucu UTC'de 00:30 derken senin makinen İstanbul'da ertesi gün 03:30 der. 'Son 30 gün' filtresini lokalde geçen bir test, CI runner'ında sınırda kalıp kırılır — üstelik sadece ayın belirli günlerinde. Java'nın `LocalDate`/`ZonedDateTime` ayrımı bu tuzağı tip düzeyinde görünür kılar; JavaScript'in tek `Date` tipi ise ayrımı gizler, ay indeksinin 0'dan başlaması gibi ek bir sürprizle birlikte (Ocak = 0). QA kuralı: tarih üreten testlerde makinenin 'şimdi'sine güvenme — zamanı sabitle (fixed clock/mock) veya karşılaştırmayı UTC üzerinden yap.

Tarih Karşılaştırma — QA Senaryosu

// ─── Şu anki tarihi al ─────────────────────────────────────── const now = new Date(); console.log("Şu an:", now.toISOString()); // 2025-06-24T... // ─── Tarihler arası gün farkı hesapla ──────────────────────── function daysBetween(d1, d2) { const ms = Math.abs(d2 - d1); // milisaniye farkı return Math.floor(ms / (1000 * 60 * 60 * 24)); // gün'e çevir } const created = new Date('2025-06-01'); const today = new Date(); console.log("Geçen gün:", daysBetween(created, today)); // ─── Token expiry kontrolü (30 dakika sonra geçersiz) ──────── const tokenCreated = new Date(); const expiry = new Date(tokenCreated.getTime() + 30 * 60 * 1000); const isExpired = new Date() > expiry; console.log("Token süresi dolmuş mu?", isExpired ? "Evet" : "Hayır"); // ─── Uyarı: getMonth() 0-indexed! ──────────────────────────── const d = new Date('2025-03-15'); console.log("Ay (yanlış):", d.getMonth()); // 2 (Mart = index 2!) console.log("Ay (doğru):", d.getMonth() + 1); // 3 ✅

Micro Lab: JavaScript QA kod yazma

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

Adim Adim: JavaScript QA kod yazma

Amaci ve asenkron bagimliliklari oku

await / Promise zincirini dogru yere yerlestir

assertion veya beklenti satirini tamamla

Kodu calistirip console veya test ciktisini oku

Flaky olursa bekleme stratejisi veya retry ekle

JavaScript QA kodunu guvenli yazma ve test etme sirasi nedir?

🎬 new Date(2025, 5, 1) Neden Temmuz Değil, Haziran'ı Gösteriyor... ya da Tam Tersi?