Een afrekenadresformulier is waar elk adresprobleem uiteindelijk een prijs krijgt. Een veld dat een legitieme invoer afwijst, een landwissel die stilzwijgend weggooit wat is getypt, een validatie die afgaat terwijl de gebruiker nog typt — elk ervan verandert in een verlaten bestelling, en geen ervan is zichtbaar in een unittest die alleen controleert of een reeks parseerbaar is.
De testgevallen hieronder zijn geschreven tegen het gedrag van het formulier als geheel in plaats van tegen een validatiefunctie. Ze dekken de overgangen: van land wisselen, terugkeren naar een opgeslagen adres, plakken, en afronden op een telefoon. De onderliggende dataregels waarvan ze afhangen, worden beschreven in adresvalidatie en -normalisatie.
De formulieren zijn degene die gebruikers echt tegenkomen
Voor de lijst een opmerking over waarom juist deze gevallen. De ernstige bugs in afrekenformulieren gaan zelden over één ongeldige reeks. Ze komen voort uit toestand: het veld dat voor het ene land was gevuld en niet voor het volgende is gewist, het label dat nog steeds ZIP-code zegt nadat het land is veranderd, het validatiebericht dat op het scherm blijft nadat de waarde is gecorrigeerd.
Schrijf gevallen die door het formulier bewegen zoals een persoon dat doet, en beweer wat de gebruiker kan zien: of de bestelling kan worden afgerond, wat de veldlabels zeggen, of de fout aan het juiste veld is gekoppeld.
Testgevallen voor verplichte en optionele velden
Begin met de vorm van het formulier zelf. In de meeste landen is de postcode verplicht; in sommige bestaat die niet en moet hij optioneel zijn. Een district- of staatveld is essentieel in sommige markten en betekenisloos in andere. Een formulier dat elk veld verplicht stelt is onbruikbaar in de landen die ze niet hebben, en een formulier dat geen enkel veld verplicht stelt accepteert een leeg adres.
Gevallen die het draaien waard zijn: met alleen de verplichte velden gevuld; met elk veld gevuld; met de optionele velden opzettelijk leeg gelaten; met de optionele velden gevuld maar alleen witruimte; en met een veld dat in het schema bestaat maar verborgen is voor het geselecteerde land. Dat laatste vangt het klassieke defect waarbij een verborgen veld toch wordt gevalideerd, zodat het formulier weigert te verzenden en geen fout toont die de gebruiker kan bereiken.
Test ook het land zonder postcode end-to-end. Het moet mogelijk zijn de bestelling af te ronden, en de bevestiging mag geen lege postcoderegel tonen.
Wat gebeurt er wanneer het land verandert?
Dit is de meest waardevolle test op de lijst, omdat de landkeuze de betekenis van elk ander veld verandert. Draai hem in beide richtingen: van een land met een postcode naar een zonder, en weer terug.
Beweer dat de postcode die onder het eerste land is ingevoerd niet stilzwijgend blijft staan onder het tweede, dat het veldlabel verandert naar de lokale term, en dat een bestaande validatiefout wordt gewist of herberekend in plaats van te blijven hangen aan een veld waarvan de regels zijn veranderd. Beweer ook dat de onderindelingslijst wordt vervangen in plaats van gefilterd, aangezien een gefilterde lijst een selectie kan achterlaten die niet bestaat in het nieuwe land.
Een verwant geval: selecteer het land als laatste. Sommige mensen vullen eerst het adres in en stellen daarna het land in. Als validatie bij elke toetsaanslag draait, zien ze fouten voor een formaat dat correct was voor een land dat ze nog niet hadden gekozen.
| Situatie | Wat de test hoort te beweren |
|---|---|
| Land gewisseld, dan teruggewisseld | De postcode die onder het eerste land is ingevoerd, blijft niet stilzwijgend staan onder het tweede |
| Veldlabel | Het label verandert naar de lokale term voor het nieuw geselecteerde land |
| Bestaande validatiefout | Wordt gewist of herberekend, in plaats van te blijven hangen aan een veld waarvan de regels zijn veranderd |
| Onderindelingslijst | Wordt vervangen in plaats van gefilterd, zodat geen verouderde selectie overleeft |
Werken plakken en automatisch aanvullen nog?
Gebruikers plakken. Ze plakken een heel adresblok in de eerste regel, ze plakken een postcode die uit een ander tabblad is gekopieerd, ze plakken een telefoonnummer met interpunctie en een internationale prefix. Ze accepteren ook wat de browser aanbiedt om automatisch aan te vullen.
Test elk. Een volledig adres in de straatregel plakken moet ofwel netjes worden afgehandeld ofwel het veld bewerkbaar en onbeschadigd laten; het mag geen validatiefout veroorzaken die het verzenden blokkeert zonder zichtbare uitleg. Een postcode met omringende witruimte plakken moet na bijsnijden worden geaccepteerd. Automatisch aanvullen moet de velden vullen die de gebruiker verwacht en mag een land of onderindeling die al is gekozen niet overschrijven.
Test daarna het plakken dat langzaam binnenkomt, teken voor teken, zoals sommige hulpmiddelen doen. Validatie die bij de eerste toetsaanslag afgaat en “ongeldige postcode” toont terwijl de waarde nog onvolledig is, is een echt defect, geen randgeval.
Testen op een telefoon en met een langzame verbinding
Mobiele lay-outs veranderen wat de gebruiker kan bereiken. Gevallen die het draaien waard zijn op een smalle breedte: de landkeuze opent en kan worden gesloten; het toetsenbord bedekt niet het veld waarin wordt getypt of de verzendknop; de onderindelingslijst is doorzoekbaar of scrollbaar wanneer hij lang is; en het foutbericht is zichtbaar zonder van het veld weg te scrollen.
Voeg een langzame of onderbroken verbinding toe. Verzend de bestelling, onderbreek het antwoord, verzend opnieuw. Het formulier mag niet twee bestellingen aanmaken omdat de knop ingeschakeld bleef, en het mag het ingevoerde adres niet verliezen wanneer het verzoek mislukt. Een pad met opgeslagen adressen verdient dezelfde behandeling: bewerk een opgeslagen adres, verlaat de bewerking, en bevestig dat het origineel intact is.
Voor ontwikkelaars: wat je moet beweren en wat je moet seeden
Beweer uitkomsten die de gebruiker kan waarnemen — het verzenden slaagt, het juiste label wordt getoond, de fout is gekoppeld aan het veld dat hem veroorzaakte — in plaats van interne validatieaanroepen. Dat houdt de tests betekenisvol wanneer de validatiebibliotheek verandert.
Seed het formulier vanuit een fixtureset die één schoon adres per markt die je bedient bevat plus de opzettelijke inconsistenties die worden beschreven in adresgegevens in testfixtures. Houd de seeddata deterministisch zodat een falend geval exact kan worden gereproduceerd, en genereer de schone voorbeelden in plaats van ze met de hand te typen, zoals de adresgenerator doet.
Markeer ten slotte de testbestellingen als testbestellingen in de omgeving zelf. Een testbestelling die identiek lijkt aan een echte, wordt uiteindelijk uitgevoerd, en een adres dat voor een test is gegenereerd is geen bezorgbaar adres.
Volgende stappen
Kies eerst het landwisselgeval — het test de meeste gedeelde code voor de minste opzet — en voeg het pad zonder postcode in dezelfde sessie toe. Draai daarna de volledige lijst één keer op mobiele breedte met het netwerk beperkt, want die combinatie vindt meer afrekenfouten dan welke hoeveelheid extra invoervalidatie dan ook. Voor de regels op veldniveau achter deze gevallen, begin met de structuur van Amerikaanse adressen.