Jedną z kluczowych funkcji w Cypress jest zdolność do sprawnego obsługiwania operacji asynchronicznych. W tym artykule przyjrzymy się czym jest metoda Cypress cy.wait(), analizując jej cel, sposób użycia i jak można ją łączyć z cy.intercept dla efektywnego testowania.
Zrozumienie cy.wait()
Metoda cy.wait() stanowi podstawową część Cypressa, stworzoną do obsługi asynchronicznych zachowań w testach. Pozwala na zatrzymanie wykonania testu do momentu spełnienia określonego warunku. Jest to istotne, zwłaszcza podczas pracy z dynamiczną zawartością, żądaniami sieciowymi czy innymi operacjami asynchronicznymi.
Podstawowe Użycie cy.wait()
Podstawowa składnia cy.wait() polega na przekazaniu okresu czasu lub konkretnego warunku do oczekiwania. Na przykład:
// Poczekaj 1000 milisekund (1 sekunda)
cy.wait(1000);
// Poczekaj, aż element o identyfikatorze 'success-message' stanie się widoczny
cy.wait(() => {
return cy.get('#success-message').should('be.visible');
});
W pierwszym przykładzie test zatrzymuje się na 1 sekundę. W drugim przykładzie oczekuje, aż element o identyfikatorze 'success-message' stanie się widoczny. Ta elastyczność czyni cy.wait() wszechstronnym narzędziem do obsługi różnych scenariuszy.
Łączenie z cy.intercept
Czasami konieczne jest oczekiwanie na zakończenie żądania sieciowego przed kontynuacją testu. Właśnie tutaj przychodzi z pomocą cy.intercept, umożliwiający przechwytywanie i kontrolowanie żądań HTTP generowanych przez aplikację.
Rozważmy poniższy przykład:
// Przechwytywanie żądania sieciowego
cy.intercept('GET', '/api/data').as('getData');
// Wywołaj akcję, która generuje żądanie sieciowe
cy.get('#load-data-button').click();
// Poczekaj na zakończenie przechwyconego żądania
cy.wait('@getData').its('response.statusCode').should('eq', 200);
// Kontynuuj test
cy.get('#data-container').should('be.visible');
W tym przykładzie metoda cy.intercept przechwytuje żądanie GET do '/api/data' i nadaje mu alias ('getData'). cy.wait('@getData') oczekuje na zakończenie tego konkretengo żądania przed kontynuacją testu. Zapewnia to synchronizację testu z zachowaniem aplikacji.
Łączenie cy.wait() z Sprawdzeniem Widoczności Elementu
Jak już wspomniano, metodę cy.wait() można łączyć z sprawdzaniem widoczności elementu dla jeszcze bardziej precyzyjnej kontroli. Przykład:
// Poczekaj, aż element o identyfikatorze 'success-message' stanie się widoczny
cy.wait(() => {
return cy.get('#success-message').should('be.visible');
}).then(() => {
// Wykonaj dodatkowe akcje/asercje po tym, jak element będzie widoczny
cy.get('#success-message').contains('Sukces!');
});
W tym przypadku test czeka, aż element o identyfikatorze 'success-message' stanie się widoczny. Gdy to nastąpi, możesz wykonać dodatkowe akcje lub asercje. To podejście jest szczególnie przydatne w sytuacjach, gdzie musisz poczekać na określony stan interfejsu użytkownika przed kontynuacją testu.
Podsumowanie
Metoda cy.wait() w Cypress to cenne narzędzie do obsługi asynchronicznych operacji w testach. Bez względu na to, czy musisz poczekać określony czas, na widoczność elementu czy na zakończenie żądania sieciowego, cy.wait() zapewnia elastyczne i efektywne rozwiązanie. Połączenie z cy.intercept sprawia, że staje się potężnym narzędziem do synchronizacji testów z dynamicznym charakterem nowoczesnych aplikacji internetowych.