0Pricing
React Academy · Ders

Formları ve Kullanıcı Akışlarını Uçtan Uca Test Etme

Çok adımlı form gönderimlerini ve gezinme akışlarını Playwright sayfa nesneleriyle otomatikleştirin.

Formları ve Kullanıcı Akışlarını Uçtan Uca Test Etme, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, React Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. React Academy kursu toplamda 4 dersten oluşur.

Uçtan Uca Form Testi Stratejisi

Uçtan uca form testleri, tam kullanıcı yolculuğunu simüle eder: sayfaya gelme, alanları doldurma, gönderme, doğrulama hatalarını ele alma ve başarılı sonucu doğrulama.

Sayfa Nesnesi Modeli

Sayfa Nesnesi Modeli (POM), bir sayfanın seçicilerini ve etkileşimlerini bir sınıf içinde kapsüller; böylece testlerin okunabilirliğini artırır ve yinelemeleri azaltır.

class LoginPage {
  constructor(private page: Page) {}

  async goto() { await this.page.goto('/login'); }
  async fillEmail(email: string) { await this.page.getByLabel('Email').fill(email); }
  async fillPassword(pw: string) { await this.page.getByLabel('Password').fill(pw); }
  async submit() { await this.page.getByRole('button', { name: /log in/i }).click(); }
  async getError() { return this.page.getByRole('alert').textContent(); }
}

Testlerde Sayfa Nesnesini Kullanma

Sayfa nesneleri kullanıldığında testler, kullanıcı eylemlerini amacını açıklayan ifadeler hâline gelir; okunmaları ve bakımlarının yapılması kolaylaşır.

test('successful login redirects to dashboard', async ({ page }) => {
  const loginPage = new LoginPage(page);
  await loginPage.goto();
  await loginPage.fillEmail('alice@example.com');
  await loginPage.fillPassword('password123');
  await loginPage.submit();
  await expect(page).toHaveURL('/dashboard');
  await expect(page.getByRole('heading', { name: 'Dashboard' })).toBeVisible();
});

Doğrulama Hatalarını Test Etme

Geçersiz veya boş verilerle gönderim yapın ve kullanıcı arayüzünün görüntülediği hata mesajlarını doğrulayın.

test('shows validation errors on empty submit', async ({ page }) => {
  await page.goto('/register');
  await page.getByRole('button', { name: 'Create account' }).click();
  await expect(page.getByText('Email is required')).toBeVisible();
  await expect(page.getByText('Password must be at least 8 characters')).toBeVisible();
});

Çok Adımlı Form Testi

Çok adımlı sihirbazlarda her adımda ilerleyerek formun ilerlediğini ve önceki girdileri koruduğunu doğrulayın.

test('completes 3-step signup', async ({ page }) => {
  await page.goto('/signup');
  // Step 1
  await page.getByLabel('First Name').fill('Alice');
  await page.getByRole('button', { name: 'Next' }).click();
  // Step 2
  await page.getByLabel('Plan').selectOption('pro');
  await page.getByRole('button', { name: 'Next' }).click();
  // Step 3
  await page.getByLabel('Card Number').fill('4242424242424242');
  await page.getByRole('button', { name: 'Complete' }).click();
  await expect(page.getByText('Welcome, Alice!')).toBeVisible();
});

Playwright'ta API Sahteleme

API çağrılarını yakalayıp sahte yanıtlar döndürmek için page.route() kullanın. Bu yaklaşım, gerçek bir arka uç olmadan uç durumları test etmek için yararlıdır.

await page.route('/api/register', async route => {
  await route.fulfill({
    status: 200,
    contentType: 'application/json',
    body: JSON.stringify({ token: 'fake-token' }),
  });
});

await page.goto('/register');
// ...fill and submit form
await expect(page).toHaveURL('/dashboard');

Dosya Yüklemelerini Test Etme

Playwright'ta dosya yüklemesini simüle etmek için setInputFiles() kullanın.

test('uploads a profile photo', async ({ page }) => {
  await page.goto('/profile');
  const fileInput = page.getByLabel('Profile photo');
  await fileInput.setInputFiles('./fixtures/avatar.png');
  await page.getByRole('button', { name: 'Upload' }).click();
  await expect(page.getByAltText('Profile photo')).toBeVisible();
});

Kimlik Doğrulama Durumunu Yeniden Kullanma

Bir kez oturum açın, tarayıcı depolama durumunu kaydedin ve tekrarlanan oturum açma akışlarını atlamak için bunu testler arasında yeniden kullanın.

// auth.setup.ts
test('authenticate', async ({ page }) => {
  await page.goto('/login');
  await page.getByLabel('Email').fill('alice@example.com');
  await page.getByLabel('Password').fill('password');
  await page.getByRole('button', { name: 'Log in' }).click();
  await page.context().storageState({ path: 'e2e/.auth/user.json' });
});

// playwright.config.ts — use storageState in other tests
use: { storageState: 'e2e/.auth/user.json' }

Hata Kurtarmayı Test Etme

Ağ hatalarını simüle edin ve kullanıcının yeniden deneyebildiğini veya yararlı bir hata mesajı gördüğünü doğrulayın.

await page.route('/api/submit', route => route.abort());
await page.getByRole('button', { name: 'Submit' }).click();
await expect(page.getByText('Network error. Please try again.')).toBeVisible();
await page.unroute('/api/submit');
// Now the real request goes through
await page.getByRole('button', { name: 'Retry' }).click();

Klavye ile Gezinmeyi Test Etme

Alanlar arasında Sekme tuşuyla ilerleyip Enter ile gönderim yaparak formların klavyeyle tamamen erişilebilir olduğunu test edin.

test('submits form with keyboard only', async ({ page }) => {
  await page.goto('/contact');
  await page.keyboard.press('Tab'); // focus name
  await page.keyboard.type('Alice');
  await page.keyboard.press('Tab'); // focus email
  await page.keyboard.type('alice@example.com');
  await page.keyboard.press('Tab'); // focus submit
  await page.keyboard.press('Enter');
  await expect(page.getByText('Message sent!')).toBeVisible();
});

Test Verileri için Düzenekler

Kurulum mantığını (örneğin bir test kullanıcısı oluşturmayı) birden fazla test arasında temiz bir şekilde paylaşmak için Playwright düzeneklerini kullanın.

// fixtures.ts
const test = base.extend<{ testUser: User }>({ 
  testUser: async ({}, use) => {
    const user = await createTestUser();
    await use(user);
    await deleteTestUser(user.id);
  },
});

// In a test file:
test('edits profile', async ({ page, testUser }) => {
  await page.goto(`/users/${testUser.id}/edit`);
});

Testleri Paralel Yürütme

Playwright, testleri varsayılan olarak çalışanlar arasında paralel yürütür. Yalnızca sırayla çalışması gereken testlerde test.describe.serial kullanın.

Hızlı Kontrol

Uçtan uca testlerde Sayfa Nesnesi Modeli'nin (POM) temel yararı nedir?

Özet

Uçtan uca form testleri sürdürülebilirlik için Sayfa Nesnelerini, API sahteleme için page.route(), yüklemeler için setInputFiles() ve kimlik doğrulama oturumlarını yeniden kullanmak için depolama durumunu kullanır. Gerçek kullanıcı yolculuklarını kapsamak için doğrulamaları, çok adımlı akışları ve klavye ile gezinmeyi test edin.

Sıkça Sorulan Sorular

“Formları ve Kullanıcı Akışlarını Uçtan Uca Test Etme” dersi ücretsiz mi?

Evet — “Formları ve Kullanıcı Akışlarını Uçtan Uca Test Etme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve React Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. React Academy kursu toplamda 4 dersten oluşur.

“Formları ve Kullanıcı Akışlarını Uçtan Uca Test Etme” dersinde ne öğreneceğim?

Çok adımlı form gönderimlerini ve gezinme akışlarını Playwright sayfa nesneleriyle otomatikleştirin. React Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

React Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te React Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Formları ve Kullanıcı Akışlarını Uçtan Uca Test Etme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu React Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her React Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. React Testing Library ile Entegrasyon Testleri
  2. MSW ile Asenkron Arayüzü ve API Çağrılarını Test Etme
  3. React için Playwright'a Başlangıç
  4. Formları ve Kullanıcı Akışlarını Uçtan Uca Test Etme
← React Academy Sayfasına Dön