Ś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

AwariaCo widzi użytkownikZwykła warstwa
PustoLista, wyszukiwanie albo koszyk bez niczegoKomponent albo jeden test UI
NiepoprawnePole odrzucone, zanim wyjdzie żądanieUnit albo komponent
TimeoutPonowienie, a nie spinner bez końcaUI z przerwanym wywołaniem
5xxKomunikat i droga powrotu, nie pusta stronaTest 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.