Rygorystyczne testy spotykają się ze światem rzeczywistym dzięki symulowanym kompleksowym testom użytkowników.

Rozwój frontendu polega na budowaniu atrakcyjnych wizualnie, funkcjonalnych aplikacji skierowanych do klienta. Ale jest pewien haczyk; aplikacje te muszą zapewniać użytkownikom bezproblemową obsługę.

Chociaż testy jednostkowe i integracyjne są niezbędne do sprawdzenia funkcjonalności aplikacji, mogą nie w pełni uchwycić typowe interakcje użytkownika. Aby naprawdę symulować podróż użytkownika, należy przeprowadzić kompleksowe testy, które odtwarzają rzeczywiste interakcje użytkownika. Dzięki temu Twoja aplikacja będzie działać zgodnie z oczekiwaniami od początku do końca.

Rozpoczęcie kompleksowych testów przy użyciu Cypress

Głównym celem kompleksowych testów w aplikacjach front-end jest weryfikacja wyników, a nie szczegółów implementacji logiki biznesowej.

Weźmy jako przykład formularz logowania. Najlepiej byłoby sprawdzić, czy ekran logowania pojawia się tak, jak powinien i czy robi to, do czego został przeznaczony. Zasadniczo podstawowe szczegóły techniczne nie są istotne. Ostatecznym celem jest po prostu wejście w buty użytkownika i ocena jego całego doświadczenia.

instagram viewer

Cyprys to świetna platforma do testowania automatycznego, która jest kompatybilna z niektórymi najpopularniejsze frameworki JavaScript. Możliwość uruchamiania testów bezpośrednio w przeglądarce oraz kompleksowy zestaw funkcji testowych sprawiają, że testowanie jest płynne i wydajne. Obsługuje również różne podejścia do testowania, w tym:

  • Testy jednostkowe
  • Testy typu end-to-end
  • Testy integracyjne

Aby napisać kompleksowe testy dla aplikacji React, rozważ następujące historie użytkowników:

  • Użytkownik może zobaczyć pole wejściowe z odpowiadającym mu przyciskiem przesyłania.
  • Użytkownik może wprowadzić zapytanie w polu wejściowym.
  • Po kliknięciu przycisku przesyłania użytkownik powinien zobaczyć listę elementów wyświetloną tuż pod polem wejściowym.

Śledząc historie użytkowników, możesz zbudować prostą aplikację React, która pozwoli użytkownikowi wyszukiwać produkty. Aplikacja pobierze dane produktów z Sztuczne API JSON i wyrenderuj go na stronie.

Kod tego projektu znajdziesz w jego pliku GitHub magazyn

Skonfiguruj projekt React

Rozpocząć, utwórz projekt React przy użyciu Vite lub skorzystaj z polecenie create-react-app umożliwiające skonfigurowanie podstawowej aplikacji React. Po zakończeniu procesu instalacji zainstaluj pakiet Cypress jako zależność deweloperską w swoim projekcie:

npm install cypress --save-dev

Teraz zaktualizuj swój pakiet.json plik, dodając ten skrypt:

"test": "npx cypress open"

Utwórz komponent funkcjonalny

w źródło katalog, utwórz folder i nadaj mu nazwę składniki. Wewnątrz tego folderu dodaj nowy produkty.jsx plik i dołącz poniższy kod.

import React, { useState, useEffect } from'react';
import"./style.component.css"

exportdefaultfunctionProducts(prop) {
const [products, setProducts] = useState([]);
const [error, setError] = useState(null);
const { searchInput } = prop;

return (

"product-catalogue">
{error? (

Product not found</p>
): (

"product-list">
{products.slice(0, 6).map((product) => (
"product" key={product.id}>

Title: {product.title}</h2>

Price: ${product.price}</p>
</div>
))}
</div>
)}
</div>
);
}

W komponencie funkcjonalnym zdefiniuj a użyjEfektu hook, który wykonuje funkcję asynchroniczną pobierającą dane produktu na podstawie podanego zapytania.

 useEffect(() => {
const fetchProducts = async () => {
if (searchInput) {
const apiUrl = `https://dummyjson.com/products/category/${searchInput}`;
try {
const response = await fetch(apiUrl);
if (!response.ok) {
thrownewError('Error fetching products');
}
const json = await response.json();
setProducts(json.products);
setError(null);
} catch (error) {
setError(error.message);
}
}
};
fetchProducts();
}, [searchInput]);

Zaktualizuj plik App.jsx

Teraz zaktualizuj Aplikacja.jsx plik z następującym kodem:

import React, { useState, useRef } from'react'
import'./App.css'
import Products from'./components/Products'

functionApp() {
const [searchInput, setSearchInput] = useState('')
const searchInputRef = useRef('');

const handleSubmit = (e) => {
setSearchInput(searchInputRef.current.value);
}

return (


Cypress Testing Library tutorial</h1>

exportdefault App

Śmiało, uruchom serwer programistyczny.

npm run dev

Świetnie! Powinieneś być w stanie pobrać określone dane produktu z fikcyjnego interfejsu API JSON.

Skonfiguruj środowisko testowe

Najpierw uruchom polecenie skryptu testowego na swoim terminalu:

npm run test

To polecenie uruchomi i otworzy klienta Cypress. Śmiało i kliknij Testowanie E2E przycisk.

Następnie kliknij Kontynuować aby dodać pliki konfiguracyjne Cypress.

Po zakończeniu tego procesu powinieneś zobaczyć w swoim projekcie nowy katalog testów Cypress. Dodatkowo klient Cypress automatycznie dodaje plik cypress.config.js. Możesz zaktualizować ten plik, aby jeszcze bardziej dostosować różne aspekty środowiska testowego, zachowania i konfiguracji.

Napisz kompleksowe testy za pomocą Cypress

Aby napisać swój pierwszy test, należy wybrać przeglądarkę, w której będzie uruchamiany test. Wybierz preferowaną opcję spośród dostępnych w kliencie Cypress.

Cypress uruchomi uproszczoną wersję wybranej przeglądarki, tworząc kontrolowane środowisko do przeprowadzania testów.

Wybierz Utwórz nową specyfikację opcję utworzenia pliku testowego.

Przejdź do edytora kodu, otwórz plik cypress/e2e/App.spec.cy.js plik i zaktualizuj zawartość tego pliku następującym kodem.

describe('App Tests', () => {
beforeEach(() => {
cy.visit('http://127.0.0.1:5173/');
});

it('Renders input field and submit button', () => {
cy.get('#text').should('exist').should('be.visible');
cy.get('#btn').should('exist').should('be.visible').contains('Submit');
});

it('Enters a search query', () => {
const searchQuery = 'laptops';
cy.get('#text').type(searchQuery);
});
});

Wracając do historii użytkowników podkreślonych powyżej, ten konkretny zestaw testów weryfikuje dwa aspekty:

  • Aby przeglądarka wyświetlała na stronie pole wejściowe i przycisk przesyłania.
  • Że użytkownik może wprowadzić zapytanie.

Podobnie jak inne narzędzia do testowania JavaScript, takie jak Jest i Supertest, Cypress wykorzystuje deklaratywną składnię i język do definiowania przypadków testowych.

Aby uruchomić test, wróć do uproszczonej wersji przeglądarki zarządzanej przez Cypress i wybierz konkretny plik testowy, który chcesz uruchomić.

Cypress przeprowadzi testy i wyświetli wyniki w lewym panelu placu zabaw testowych.

Symulowanie procesów aplikacyjnych

Aby mieć pewność, że przejdziesz i przetestujesz całą podróż użytkownika – w tym konkretnym przypadku użycia – musisz to zweryfikować aplikacja może przyjąć dane wprowadzone przez użytkownika, pobrać wymagane dane i na koniec wyświetlić je w przeglądarce strona.

Dla przejrzystości możesz utworzyć nowy plik testowy, aby pomieścić inny zestaw testów w pliku e2e teczka. Alternatywnie możesz także zdecydować się na uwzględnienie wszystkich zestawów testów badających konkretny przypadek testowy w jednym pliku testowym.

Śmiało, utwórz nowy Produkty.spec.cy.js plik w e2e teczka. Wewnątrz tego pliku umieść następujący kod.

describe('Products Tests', () => {
it(' fetches and displays the data', () => {
const searchQuery = 'laptops';
cy.visit('http://127.0.0.1:5173');

cy.get('#text').type(searchQuery);
cy.get('#btn').contains('Submit').click();

cy.get('.product').should('have.length.greaterThan', 0);

cy.get('.product').first().should('contain', 'Title');
cy.get('.product').first().should('contain', 'Price: $');
});

});

Ten zestaw testów sprawdza, czy po wprowadzeniu przez użytkownika określonego elementu wyszukiwania aplikacja pobiera i wyświetla dane na stronie przeglądarki.

Czyni to poprzez symulację procesu wprowadzania danych wyszukiwania, kliknięcia przycisku przesyłania i oczekiwania na produkty do załadowania, a następnie sprawdzenie obecności pozycji produktu wraz ze szczegółami, takimi jak tytuł i cena. Krótko mówiąc, przechwytuje i weryfikuje całe doświadczenie z perspektywy użytkownika.

Symulowanie błędów i odpowiedzi

Możesz także symulować różne scenariusze błędów i reakcje w testach Cypress.

Stwórz nowy Błąd.spec.cy.js plik w e2e katalogu i dołącz następujący kod.

describe('Error Handling Tests', () => {
it('Displays error message for incorrect search query', () => {

cy.intercept('GET', /https:\/\/dummyjson\.com\/products\/category\/.*/, {
statusCode: 404, // Not Found
body: 'Product not found'
}).as('fetchProducts');

cy.visit('http://127.0.0.1:5173');

const incorrectSearchQuery = 'rocket';
cy.get('#text').type(incorrectSearchQuery);
cy.get('#btn').click();

cy.wait('@fetchProducts');

cy.contains('Product not found').should('be.visible');
});
});

Ten zestaw testów sprawdza, czy po wprowadzeniu przez użytkownika nieprawidłowego zapytania wyświetlany jest komunikat o błędzie.

Aby przypadek testowy przeszedł pomyślnie, używa Cypress' przechwycić funkcja odcinania sieci i symulowania błędu żądania sieciowego. Następnie sprawdza, czy po wpisaniu nieprawidłowego zapytania w polu wejściowym i rozpoczęciu procesu pobierania, na stronie widoczny jest komunikat o błędzie – Nie znaleziono produktu.

Wynik ten wskazuje, że mechanizm obsługi błędów działa zgodnie z oczekiwaniami.

Używanie Cypress w rozwoju opartym na testach

Testowanie jest podstawowym wymogiem programistycznym, ale może być również procesem czasochłonnym. Jednak włączenie Cypress może przynieść czystą satysfakcję z oglądania razem przebiegających przypadków testowych.

Cypress to doskonałe narzędzie do wdrażania programowania opartego na testach w aplikacjach — nie tylko zapewnia kompleksowy zestaw funkcji testowych, ale także obsługuje różne strategie testowania. Aby w pełni wykorzystać możliwości Cypress, zapoznaj się z jego oficjalną dokumentacją i odkryj znacznie więcej możliwości testowania.