React Academy · Les

Formulieren en gebruikersflows end-to-end testen

Automatiseer formulierverzendingen met meerdere stappen en navigatieflows met Playwright page objects.

Les 4 van 414 stappen

Formulieren en gebruikersflows end-to-end testen is een gratis React Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject React Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus React Academy bevat in totaal 4 lessen.

Strategie voor E2E-formuliertests

E2E-formuliertests simuleren de volledige gebruikersroute: de pagina openen, velden invullen, het formulier verzenden, validatiefouten afhandelen en het succesvolle resultaat controleren.

Paginaobjectmodel

Het Page Object Model (POM) kapselt selectoren en interacties voor een pagina in een klasse in, waardoor tests leesbaar blijven en minder herhaling bevatten.

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(); }
}

Het paginaobject in tests gebruiken

Met paginaobjecten worden tests beschrijvingen van gebruikersacties op intentieniveau — makkelijk te lezen en te onderhouden.

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();
});

Validatiefouten testen

Verzend ongeldige of lege gegevens en controleer de foutmeldingen die de gebruikersinterface weergeeft.

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();
});

Formulieren met meerdere stappen testen

Doorloop bij wizards met meerdere stappen elke stap en controleer of het formulier verdergaat en eerdere invoer behoudt.

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();
});

Een API mocken in Playwright

Gebruik page.route() om API-aanroepen te onderscheppen en nagebootste antwoorden terug te sturen — handig om randgevallen te testen zonder echte backend.

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');

Bestandsuploads testen

Gebruik setInputFiles() om in Playwright een bestandsupload te simuleren.

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();
});

Authenticatiestatus hergebruiken

Meld je één keer aan, sla de opslagstatus van de browser op en hergebruik die in tests om herhaalde aanmeldingsroutes over te slaan.

// 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' }

Herstel na fouten testen

Simuleer netwerkfouten en controleer of de gebruiker opnieuw kan proberen of een behulpzame foutmelding ziet.

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();

Toetsenbordnavigatie testen

Test of formulieren volledig toegankelijk zijn met het toetsenbord door met Tab door de velden te gaan en met Enter te verzenden.

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();
});

Fixtures voor testgegevens

Gebruik Playwright-fixtures om instellogica, zoals het aanmaken van een testgebruiker, netjes met meerdere tests te delen.

// 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`);
});

Tests parallel uitvoeren

Playwright voert tests standaard parallel uit over meerdere werkprocessen. Gebruik test.describe.serial alleen voor tests die in een bepaalde volgorde moeten worden uitgevoerd.

Korte controle

Wat is het belangrijkste voordeel van het Page Object Model (POM) bij E2E-testen?

Samenvatting

E2E-formuliertests gebruiken paginaobjecten voor onderhoudbaarheid, page.route() voor het mocken van API's, setInputFiles() voor uploads en opslagstatus om authenticatiesessies te hergebruiken. Test validatie, stromen met meerdere stappen en toetsenbordnavigatie om realistische gebruikersroutes af te dekken.

Gratis beginnen

Leer React met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
88
Lessen
324

Veelgestelde vragen

Is de les “Formulieren en gebruikersflows end-to-end testen” gratis?

Ja — de volledige tekst van “Formulieren en gebruikersflows end-to-end testen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus React Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus React Academy bevat in totaal 4 lessen.

Wat leer ik in “Formulieren en gebruikersflows end-to-end testen”?

Automatiseer formulierverzendingen met meerdere stappen en navigatieflows met Playwright page objects. Je oefent met React Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met React Academy te beginnen?

Ervaring vooraf is niet nodig. React Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Formulieren en gebruikersflows end-to-end testen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over React Academy?

Ja. Elke les over React Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Integration testing met React Testing Library
  2. Asynchrone UI en API-aanroepen testen met MSW
  3. Aan de slag met Playwright voor React
  4. Formulieren en gebruikersflows end-to-end testen
← Terug naar React Academy