Testing is in frontend-teams het vak dat iedereen belangrijk noemt en niemand in de sprint plant — tot de regressie op vrijdagmiddag komt. Het Testing Lab van NLCodeCraft Frontend Academy maakt testen tot een craft-gewoonte: wat u automatiseert, wat u met de hand blijft zien, en hoe u een test schrijft die niet breekt bij elke className. Mark van Leeuwen beoordeelt tests op intentie, niet op coverage-percentages die een dashboard groen kleuren.

Instroom: eigen componenten uit React of werk. Wie nog geen component heeft, test lucht. Wij gebruiken Testing Library-patronen en een end-to-end pad voor de kritieke flow. Jest, Vitest of Playwright zijn gereedschap; de les is de vraag “welk gedrag belooft dit scherm de gebruiker?”.
Piramide zonder dogma
Veel unit tests op pure logica. Minder tests op componenten, gericht op toegankelijke namen en zichtbare staten. Weinig end-to-end, op de flow die omzet of intake raakt. Snapshot-zeeën zonder intentie wijzen wij af. Een test die de implementatiedetails van CSS-modules vastlegt, is onderhoudsschuld.
| Laag | Voorbeeld | Wanneer niet |
|---|---|---|
| Unit | prijsformatter, schema-guard | React-render van een icoon |
| Component | fouttekst na submit, toetsenbord in dialog | Elke Tailwind-class |
| E2E | intake versturen, inloggen als dat in scope is | Elke visuele pixel |
Lab-modules testing
Queries die de gebruiker speelt
getByRole, getByLabelText. Test-id’s zijn ontsnapping, geen default.
Staten forceren
loading/error/success in de test setup. Alleen the happy path testen is theater.
Async zonder flaky
findBy, waitFor, geen slapende timeouts “voor de zekerheid”.
Eén kritieke reis
Van landingsintentie tot bevestiging. Die reis krijgt E2E; de rest niet.
Wij koppelen tests aan UI-patronen: een Button-variant zonder toetsenbordtest is incompleet. En aan Next.js wanneer u die module volgt: serverfouten moeten in de UI-test zichtbaar zijn, niet alleen in de netwerk-tab van de docent.
test("toont een toegankelijke fout na mislukte intake", async () => {
render(<IntakeForm onSubmit={failingSubmit} />);
await userEvent.click(screen.getByRole("button", { name: "Intake versturen" }));
expect(await screen.findByRole("alert")).toHaveTextContent("Intake mislukt");
});
Huiswerk: tests bij uw bestaande component plus een korte lijst “bewust niet getest” met reden. Mark van Leeuwen is strenger op die lijst dan op het aantal its. Wie alles test, onderhoudt niets. Wie niets test, beweert craft zonder bewijs.
Veelgestelde vragen
Is 80% coverage een eis?
Nee. Wij eisen de kritieke staten en één E2E-reis. Coverage is een lamp, geen stuur.
Cypress of Playwright?
Playwright is de lesdefault. Wie Cypress op het werk heeft, mag vertalen.
Testen jullie visuele regressie?
Alleen als concept. Pixel-CI is een teamkeuze met kosten.
Wat als mijn werk-repo tests verbiedt in de les?
Dan werkt u in de academy-repo. Wij kopiëren geen interne productiecode.
Leslocatie en bereik in Amsterdam
NLCodeCraft geeft klassikale en hybride frontend-opleidingen vanaf de Wibautstraat, op de Knowledge Mile tussen Amstel en Weesperplein. Cursisten komen uit de onderstaande stadsdelen; avondgroepen starten na kantoortijd zodat u vanuit Zuid, Noord of Oud-West kunt aansluiten zonder een extra reisdag in te plannen.
- Centrum
- De Pijp
- Oud-West
- Oost
- Watergraafsmeer
- Amsterdam-Noord
- Zuid
- Westerpark
NLCodeCraft Frontend Academy
Uw aanspreekpunt: Mark van Leeuwen
Wibautstraat 131
1091 GL Amsterdam
Telefoon: +31 20 244 3188
E-mail: [email protected]