Ścieżki negatywne: puste stany, walidacja, timeouty i błędy 5xx
Automatyzuj puste stany, błędy walidacji, timeouty i awarie serwera bez kopiowania szczęśliwej ścieżki.
Ten wpis jest częścią serii Strategia automatyzacji. Jeśli pominąłeś poprzedni, przeczytaj Część 7 — Testy kontraktu a E2E.
Wprowadzenie — suite umie się udać
Większość testów automatycznych idzie ścieżką, która działa. Formularz jest poprawny. API zwraca 200. Lista ma wiersze. Nie ma użytkownika, który spotyka produkt w zły dzień.
Ścieżki negatywne to nie druga kopia suite. To kilka awarii, które zmieniają to, co użytkownik może zrobić, w najtańszej warstwie, która je widzi.
Cztery awarie warte testu
| Awaria | Co widzi użytkownik | Zwykła warstwa |
|---|---|---|
| Pusto | Lista, wyszukiwanie albo koszyk bez niczego | Komponent albo jeden test UI |
| Niepoprawne | Pole odrzucone, zanim wyjdzie żądanie | Unit albo komponent |
| Timeout | Ponowienie, a nie spinner bez końca | UI z przerwanym wywołaniem |
| 5xx | Komunikat i droga powrotu, nie pusta strona | Test UI albo API |
Jeśli dwa wiersze sprawdzałyby ten sam komunikat, zostaw jeden. „E-mail jest wymagany” i „e-mail musi zawierać @” to różne rzeczy. „Serwer niedostępny” dla trzech endpointów ze wspólnym komponentem błędu to jeden test.
Nie klonuj szczęśliwej ścieżki
Test negatywny, który loguje, wypełnia sześć poprawnych pól i psuje siódme, to drogi sposób na jedną asercję. Zbuduj stan, którego potrzebujesz, i skończ.
test('empty search tells the user nothing matched', async ({ page }) => {
await page.route('**/api/search**', (route) =>
route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify({ results: [] }),
}),
);
await page.goto('/search?q=zzzz');
await expect(page.getByRole('status')).toHaveText('No matches');
});
Route to setup. Tekst statusu to test.
Walidacja ma być blisko pola
Test E2E każdego komunikatu walidacji trwa minuty i pęka przy zmianie copy. Regułę testuj obok kodu, który ją realizuje. Zostaw jeden test UI, który dowodzi, że komunikat jest podpięty do pola, na które patrzy użytkownik.
Odrzucenie po stronie serwera to inny przypadek. Klient uznał wartość za dobrą, serwer powiedział nie. Taki test wysyła raz i sprawdza błąd z odpowiedzi, nie podpowiedź kliencką.
Timeouty i 5xx
Przerwij wywołanie albo zwróć 500. Sprawdzaj tylko trzy rzeczy:
- użytkownik nie zostaje na nieskończonym spinnerze
- widać, że akcja się nie udała
- drugie kliknięcie nie tworzy drugiego zamówienia, płatności ani zaproszenia
Trzeci punkt kosztuje pieniądze. Jeśli z tego wpisu zautomatyzujesz tylko jedno, zautomatyzuj to.
Podsumowanie
Wybierz awarie, które zmieniają wynik. Każdą połóż w najniższej warstwie, która ją widzi. Sprawdzaj wynik, nie setup.
Zadanie na ten tydzień: Wypisz pięć ostatnich błędów z produkcji, które nie były szczęśliwą ścieżką. Dodaj jedną automatyczną kontrolę dla tej, która może wrócić przez podwójne kliknięcie albo 500 z zależności.
To kończy serię Strategia automatyzacji.