Testen zonder Testteam
41% van alle code is AI-gegenereerd. Het meeste daarvan wordt niet getest. Leer hoe je als solo-builder kwaliteit waarborgt zonder QA-afdeling.
Waarom deze module?
Hier is het ongemakkelijke feit over vibe coden: de meeste AI-gegenereerde code wordt verscheept zonder serieuze tests. En dat is een probleem. Niet omdat testen leuk is (dat is het zelden), maar omdat bugs in productie je gebruikers kosten, je reputatie schaden en je meer tijd kosten dan testen ooit zou hebben gedaan.
Maar je hebt geen QA-afdeling. Geen testteam. Misschien zelfs geen testervaring. En dat is precies waarom deze module bestaat. Want het goede nieuws is: dezelfde AI die je code schrijft, kan ook je tests schrijven. En de nieuwste generatie testtools laat je in gewone taal beschrijven wat je wilt testen.
In deze module leer je een testaanpak die praktisch, haalbaar en effectief is voor solo-builders en kleine teams. Geen academische testtheorie, maar concrete technieken die je vandaag kunt toepassen.
Het risico van niet testen
Laten we eerlijk zijn over wat er gebeurt als je niet test.
AI-code bevat meer fouten
Onderzoek van CodeRabbit uit december 2025 toonde aan dat code die samen met AI is geschreven 1,7 keer meer serieuze problemen bevat dan code die volledig door mensen is geschreven. Dezelfde analyse vond 2,74 keer meer beveiligingskwetsbaarheden in AI-gegenereerde code.
Bugs in productie kosten exponentieel meer
Een bug die je ontdekt tijdens het bouwen kost je vijf minuten. Dezelfde bug in productie kost je uren aan debuggen, boze gebruikers, en soms verloren data. Hoe later je een bug vindt, hoe duurder hij is om op te lossen.
AI-fixes introduceren nieuwe bugs
Wanneer je de AI vraagt om een bug te fixen zonder gestructureerd te testen, lost hij vaak het symptoom op terwijl hij een nieuw probleem introduceert. Zonder tests merk je dat pas als een gebruiker klaagt.
Vertrouwen bij je gebruikers
Niets vernietigt vertrouwen sneller dan een app die crasht, data kwijtraakt of onvoorspelbaar gedrag vertoont. Testen is niet alleen een technische noodzaak, het is een belofte aan je gebruikers.
Drie niveaus van testen
Professionele testers werken met een “testpiramide”: veel kleine, snelle tests aan de basis, minder uitgebreide tests in het midden, en een paar grote tests aan de top. Als solo vibe coder volg je hetzelfde principe, maar met een pragmatische invulling.
Niveau 1: Handmatig testen (de basis)
Dit is het minimum dat je bij elke wijziging doet. Het kost geen setup, geen tools en geen kennis. Alleen discipline.
Wat je test:
- Werkt de kernfunctie? (de actie die je app bestaansrecht geeft)
- Werkt de navigatie? (kan de gebruiker overal komen?)
- Werken formulieren? (validatie, opslaan, foutmeldingen)
- Werkt het op mobiel? (responsive check)
- Wat gebeurt er bij lege input? Bij foute input?
Wanneer je test: Na elke prompt die iets verandert. Niet aan het einde van de dag. Na elke wijziging. Dit klinkt overdreven, maar elke test duurt dertig seconden tot twee minuten. Een bug die je nu vangt, kost je straks geen uur.
De verse-ogen test: Open je app in een incognito/privébrowser. Geen ingelogd account, geen testdata. Ervaar je app als een nieuwe gebruiker. Waar loop je vast? Wat is verwarrend? Dit simpele ritueel vangt meer problemen dan welke automatische test ook.
Niveau 2: AI-gegenereerde unit tests
Unit tests controleren of individuele functies correct werken. Ze zijn snel, automatisch, en ideaal om door AI te laten schrijven. Dit is een van de taken waar AI het meest uitblinkt.
Wat zijn unit tests? Een unit test is een stukje code dat een specifieke functie aanroept met bekende input en controleert of de output klopt. Bijvoorbeeld: je hebt een functie die BTW berekent. De unit test roept die functie aan met € 100 en controleert of het resultaat € 121 is.
Wanneer unit tests schrijven: Na het bouwen van elke functie die berekeningen doet, data transformeert, of business logica bevat. Je hoeft niet elke knop en elk UI-element te unit-testen. Focus op de logica.
Niveau 3: End-to-end tests (de gebruikersreis)
End-to-end tests simuleren een echte gebruiker die door je app navigeert. Ze openen een browser, klikken op knoppen, vullen formulieren in en controleren of het resultaat klopt. Dit is het meest waardevolle type test, maar ook het meest tijdrovend om op te zetten.
Wanneer end-to-end tests schrijven: Voor je kritieke gebruikersflows. Als je app een facturatietool is: test het complete pad van inloggen, factuur aanmaken, opslaan en terugvinden. Als een van die stappen breekt, wil je dat weten voor je gebruikers het merken.
1. Handmatig testen na elke wijziging (altijd, zonder uitzondering)
2. Unit tests voor je kernlogica (BTW-berekening, datumlogica, autorisatie)
3. End-to-end test voor je belangrijkste gebruikersflow
Als je alleen niveau 1 doet, ben je al beter af dan 90% van de vibe coders.
Vibe testing: de volgende stap
Net zoals vibe coden je laat programmeren in gewone taal, laat vibe testing je testen in gewone taal. Je beschrijft wat je wilt testen, en een AI-agent voert de test uit in een echte browser, precies zoals een menselijke tester dat zou doen.
Dit is geen toekomstmuziek. De tools bestaan nu en ze zijn in 2026 volwassen genoeg voor serieus gebruik.
Hoe het werkt
In plaats van testcode te schrijven, beschrijf je je test in gewone taal:
De AI-agent opent een echte browser, navigeert je app, voert de stappen uit en rapporteert of alles werkt. Als iets faalt, krijg je een screenshot van waar het misging en een beschrijving van het probleem.
| Tool | Wat het doet | Kenmerken |
|---|---|---|
| Playwright + AI | Open-source testframework van Microsoft. In combinatie met AI kun je tests genereren vanuit beschrijvingen. | Gratis, alle browsers, CI/CD-integratie, industriestandaard |
| testRigor | Een van de eerste echte vibe testing platforms. Je schrijft tests in gewoon Engels. | Gewone taal, self-healing, visuele rapportages |
| Autify | No-code testautomatisering voor web en mobiel. Tests opnemen door je app te gebruiken. | Opnemen door te klikken, AI-onderhoud, niet-technisch |
De test-per-prompt workflow
De meest effectieve testaanpak voor vibe coders is simpel: test na elke prompt. Niet aan het einde van de dag, niet voor de deploy, maar na elke individuele wijziging.
Stap 1: Schrijf je prompt
Beschrijf wat je wilt bouwen of wijzigen (zie Module 5 voor prompttechnieken).
Stap 2: Bekijk het resultaat
Lees de gegenereerde code. Je hoeft niet elke regel te begrijpen, maar scan op dingen die niet kloppen: ontbrekende validatie, hardcoded waarden, functies die verdacht lang zijn.
Stap 3: Test handmatig
Open je app. Werkt de wijziging? Test het normale pad (het werkt zoals verwacht) en het abnormale pad (wat gebeurt er bij foute input, lege velden, of onverwachte acties?).
Stap 4: Laat AI een test schrijven
Na elke significante feature, vraag de AI om een test te schrijven die controleert of de feature werkt.
Stap 5: Draai alle bestaande tests
Niet alleen de nieuwe test, maar alle tests. Elke keer. Dit vangt de verrassingsbugs: wijzigingen die onbedoeld iets anders breken.
Stap 6: Commit en ga verder
Alles werkt? Commit naar Git. Ga door naar de volgende prompt. Als iets niet werkt: fix het nu, niet later.
Focus je testtijd: wat ertoe doet
Je kunt niet alles testen. Dat is ook niet nodig. De kunst is focus aanbrengen op de dingen die het meest impact hebben als ze falen.
Altijd testen
- Authenticatie en autorisatie — Kan een gebruiker inloggen? Kan een uitgelogde gebruiker beschermde pagina's bereiken? Kan gebruiker A de data van gebruiker B zien?
- De kernfunctie — De ene actie die je app bestaansrecht geeft. Test dit pad volledig, van begin tot eind.
- Data-integriteit — Wordt data correct opgeslagen, opgehaald en weergegeven? Een factuur van € 1.000 die als € 100 wordt opgeslagen is een ernstige bug.
- Formuliervalidatie — Lege velden, foute formaten, te lange input, speciale tekens.
- Betalingsflows — Test elke stap van het betalingsproces, inclusief wat er gebeurt als een betaling faalt halverwege.
Mag je overslaan (voor nu)
- Pixel-perfecte styling — Of een knop 2 pixels naar links staat maakt niet uit zolang hij werkt.
- Elk mogelijk browsertype — Test in Chrome en op mobiel. Dat dekt 85% van je gebruikers.
- Performance-optimalisatie — Tenzij je app merkbaar traag is, is dit iets voor wanneer je meer dan duizend gebruikers hebt.
- 100% code coverage — Code coverage is een nuttige metric, maar 100% is een doel dat meer kost dan het oplevert. Streef naar het testen van je risicogebieden, niet naar een getal.
De pre-deploy checklist
Voor elke deploy naar productie, loop deze checklist af. Print hem uit, hang hem naast je scherm, en sla hem nooit over.
Functionaliteit
- De kernfunctie werkt volledig (handmatig getest)
- Alle formulieren valideren correct (lege velden, foute input)
- Navigatie werkt (elke link, elke knop)
- De app werkt op mobiel (test op een echt apparaat of via devtools)
- Foutmeldingen zijn duidelijk en helpend (niet “Error 500”)
- Lege states zijn afgehandeld (wat ziet een nieuwe gebruiker?)
Beveiliging
- Geen API-keys of secrets in de code (zoek op hardcoded strings)
- Row Level Security is ingeschakeld in Supabase
- Gebruikers kunnen alleen hun eigen data benaderen
- Input wordt gevalideerd aan zowel de client- als server-kant
- HTTPS is actief
Data
- Data wordt correct opgeslagen (maak een testrecord, controleer in de database)
- Data wordt correct weergegeven (klopt wat je ziet met wat er in de database staat?)
- Verwijderen werkt (en is onomkeerbaar of met bevestiging)
- Geen testdata meer in de productiedatabase
Performance & deployment
- Pagina's laden binnen 3 seconden
- Geen eindeloze laadspinners
- Geen console-errors in de browser developer tools
- Alle environment variables zijn ingesteld in het deployment platform
- De productie-URL werkt (niet alleen de preview-URL)
- Git is up-to-date (alle wijzigingen gecommit en gepusht)
Automatisch testen bij elke deploy
Tot nu toe heb je handmatig en lokaal getest. Maar wat als je tests automatisch draaien elke keer dat je code pusht? Dat is continuous testing, en het is makkelijker op te zetten dan je denkt.
Wat is continuous testing?
Elke keer dat je code pusht naar GitHub, draait een systeem automatisch al je tests. Als een test faalt, krijg je een melding en wordt de deploy geblokkeerd. Geen kapotte code meer in productie.
Hoe zet je het op?
De meeste vibe coders gebruiken GitHub Actions. Het is gratis voor publieke repositories en heeft een genereuze gratis tier voor private repositories.
De workflow draait nu automatisch bij elke push. Je ziet een groen vinkje als alles slaagt en een rood kruisje als iets faalt. Vercel en Netlify respecteren deze checks: als de tests falen, wordt niet gedeployed.
Elke keer dat je een nieuwe feature bouwt en daar een test voor schrijft, wordt die test automatisch meegenomen in de workflow. Je testsuite groeit organisch met je project.
Denk als je gebruiker, niet als de bouwer
De grootste blinde vlek van elke bouwer is dat je weet hoe je app werkt. Je test altijd het “gelukkige pad”: de route die je hebt ontworpen. Maar je gebruikers nemen routes die je nooit hebt bedacht.
De chaos-test
Open je app en doe bewust dingen die je niet “hoort” te doen:
- Klik vijf keer snel achter elkaar op dezelfde knop
- Vul een formulier half in en navigeer weg. Ga terug. Wat gebeurt er?
- Open dezelfde pagina in twee tabbladen en maak tegelijkertijd wijzigingen
- Gebruik de terug-knop van je browser op onverwachte momenten
- Vul emoji's, speciale tekens of extreem lange teksten in
- Probeer een URL direct te bezoeken zonder ingelogd te zijn
De oma-test
Vraag iemand die niets van technologie weet om je app te gebruiken. Geef geen instructies. Kijk mee. Waar klikken ze? Waar aarzelen ze? Waar raken ze gefrustreerd?
Dit is geen formele usability test. Het is een reality check. Als je oma het niet begrijpt, begrijpen je gebruikers het misschien ook niet.
De concurrent-test
Stel je voor dat iemand je app wil saboteren. Wat zouden ze proberen?
- Kunnen ze data van andere gebruikers zien door URL's aan te passen?
- Kunnen ze formuliervalidatie omzeilen?
- Kunnen ze meer doen dan waarvoor ze geautoriseerd zijn?
- Wat gebeurt er als ze requests manipuleren?
Je hoeft geen beveiligingsexpert te zijn om deze vragen te stellen. Het stellen van de vraag is vaak al genoeg om het probleem te vinden.
Je testplan in vijf minuten
Je hoeft geen uitgebreid testdocument te schrijven. Dit simpele template is genoeg. Vul het in voor je project, hang het naast je scherm, en volg het bij elke deploy.
| Onderdeel | Invullen voor jouw project |
|---|---|
| Kernfunctie | De ene actie die altijd moet werken (bijv. factuur aanmaken, boeking plaatsen) |
| Kritieke paden | De 3 belangrijkste gebruikersflows (bijv. registreren → inloggen → dashboard zien) |
| Unit tests | Functies met business logica (bijv. BTW-berekening, datumformattering, autorisatiecheck) |
| Beveiligingstests | Niet-ingelogde gebruiker kan geen beschermde pagina's zien, gebruiker A kan niet bij data van gebruiker B, formulierinput wordt gevalideerd |
| Pre-deploy | Volledige pre-deploy checklist doorlopen (zie hierboven) |
Begin vandaag met testen
Testen hoeft niet ingewikkeld te zijn. Begin met het simpelste niveau: test handmatig na elke wijziging. Dat is al beter dan wat de meeste vibe coders doen. Voeg daarna stap voor stap toe: een unit test hier, een end-to-end test daar, en uiteindelijk een automatische pipeline die alles voor je controleert.
De beste test is de test die je daadwerkelijk uitvoert. Een simpel testplan dat je volgt, is beter dan een uitgebreid testplan dat in een la ligt.