Hinweis 04-3: Timeout und Retry
Stufe 1 zuerst lesen, dann selbst probieren. Die nächste Stufe erst, wenn du nach zwei Versuchen feststeckst.
Stufe 1: Denkfrage
Ein Timeout heisst: Du weisst nicht, ob die Anfrage angekommen ist. Was darf ein "Erneut versuchen"-Button deshalb tun, und was nicht? (Hinweis: Entwürfe anfordern ist harmlos; eine Zahlung auslösen wäre es nicht.)
Stufe 2: Teilbeispiel
{state.kind === "error" && (
<div>
<p data-testid="api-error">{state.message}</p>
<button type="button" data-testid="retry-button" onClick={requestDraft}>Erneut versuchen</button>
</div>
)}
Stufe 3: Konkrete Erklärung
Der Retry-Button ruft dieselbe requestDraft-Funktion auf wie der Hauptbutton. Der Test
C02-M4-04 zählt die Aufrufe der API: nach dem ersten Klick 1, nach dem Retry 2. Der
Simulator im Modus "timeout" schlägt wieder fehl; das ist in Ordnung, der Test prüft nur den
zweiten Aufruf. Setze den Hauptbutton während loading auf disabled, damit niemand
doppelt klickt. Zum Ausprobieren im Browser: createSimulatedApi("timeout", { timeoutMs: 2000 })
in App.tsx, danach wieder auf "success" zurückstellen.