Sınıflar, Modüller & JSON
Sınıflar, Modüller & JSON: Sınıf Hiyerarşisi — class Dog extends Animal JavaScript'te modern kod mimarisi nesne yönelimli sınıflar (ES6 Classes), modül yükleyicileri (import/expo
Sınıf Hiyerarşisi — class Dog extends Animal
JavaScript'te modern kod mimarisi nesne yönelimli sınıflar (ES6 Classes), modül yükleyicileri (import/export) ve sunuculardan veri getirdiğimiz JSON formatı üzerine kurulur. Bunu bir mutfak organizasyonu gibi düşün: sınıf, tarifi ve gerekli aletleri bir arada tutan tarif kartıdır; modül, o kartın durduğu çekmecedir; JSON ise siparişin mutfağa ulaşan yazılı hâlidir. Otomasyon testlerinde Page Object Model (POM) yapısı tamamen sınıflarla tasarlanır. Peki test kodunu düz fonksiyonlarla da yazabilecekken neden bu yapıya ihtiyaç duyuyoruz? Çünkü bir login formunun locator'ı değiştiğinde, sınıfsız bir suite'te o selector'ı 40 dosyada aramak zorunda kalırsın; POM'da tek bir `LoginPage` sınıfında değiştirirsin. Java'daki karşılığı birebirdir — `class LoginPage` + `import` yerine `export class LoginPage` + `import` yazarsın; fark şu ki JavaScript'te `import` yolu dosya sistemine bağlıdır, Java'daki gibi package adına değil. QA açısından bu ayrım bakım maliyetinin ta kendisidir: UI'ı sık değişen bir üründe POM'suz yazılmış bir suite, ikinci sprintte silinip yeniden yazılır.
Java Class vs JavaScript ES6 Class — Karşılaştırma
ES6 Module: import / export Kullanımı
// ── pageObjects/BasePage.js ────────────────────── export class BasePage { // named export constructor(url) { this.url = url; } open() { console.log("Navigating to:", this.url); } } export const BASE_URL = "https://learnqa.dev"; // named export (sabit) // ── pageObjects/LoginPage.js ───────────────────── import { BasePage, BASE_URL } from './BasePage.js'; // named import class LoginPage extends BasePage { constructor() { super(BASE_URL + "/login"); // super() ile parent constructor çağrısı } fillForm(user, pass) { return `Logging in as ${user}`; } } export default LoginPage; // default export // ── tests/login.test.js ────────────────────────── import LoginPage from '../pageObjects/LoginPage.js'; // default import const page = new LoginPage(); page.open(); console.log(page.fillForm("hasan", "secret123"));
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?