Mam stół pokazujący wyniki zapytania. Po uruchomieniu zapytania, pojawi się ładunek spinner, a następnie, gdy serwer zwraca dane, wyniki. Ten prosty scenariusz jest dziwnie trudny do testowania w cyprysie.

cy.get("table .loadingSpinner", {timeout: 60000}).should("be.visible");
cy.get("table .loadingSpinner", {timeout: 60000}).should("be.not.visible");
cy.get("table", {timeout: 60000}).find("tr[data-index]", {timeout: 60000}).should("have.length.gt", 0);

Czasami ten kod nie powiedzie się na pierwszym wierszu, ponieważ ładowanie jest tak szybki cyprys nie może złapać widoczności obciążenia błotnika. Najgorsze, ten scenariusz tworzy moje wyniki testowe w zależności od obciążenia serwera. Oczywiście nie mogę po prostu sprawdzić, czy table tr ma długość i GT; 0, pasuje do poprzednich danych pokazanych w tabeli, a nie zapytanie, które właśnie zrobiłem i chcę sprawdzić wyniki. Jak sobie z tym poradzić?

Mógłbym czekać na odpowiedź surowej serwera, ale nie byłaby to praktyczny, a może nawet nie jest to możliwe, mam dziesiątki tabel zapytać różne punkty końcowe, czasem więcej niż jeden dla tej samej tabeli.

0
alfredopacino 15 kwiecień 2021, 15:46

3 odpowiedzi

Najlepsza odpowiedź

Czy testujesz funkcjonalność Spinner lub testujesz wynik zapytania?

Jeśli testujesz zapytanie, po prostu

{
  cy.wait(100)
  cy.get("table .loadingSpinner", {timeout: 60000}).should("be.not.visible");
}

I nie szukaj tego, żeby tam być, po prostu szukaj tego, aby tam być. W razie potrzeby zwiększyć limit czasu.

Jeśli testujesz spinner, aplikacja musi spowolnić, abyś miał szansę złapać go.

1
Arild Andreassen 15 kwiecień 2021, 22:00

Czy próbowałeś .should("not.be.empty") na stole?

0
dsp 15 kwiecień 2021, 15:16

Jedynym sposobem, jaki widzę, aby niezawodnie testować ładowarka jest przechwycenie i opóźnienie odpowiedzi.

Zobacz Przetwórz - StaticresponseObject, który ma opcję opóźnienia, aby symulować wolną sieć , który jest scenariuszem, w którym użytkownik widzi ładowarkę.

{
  /**
   * Serve a fixture as the response body.
   */
  fixture?: string
  /**
   * Serve a static string/JSON object as the response body.
   */
  body?: string | object | object[]
  /**
   * HTTP headers to accompany the response.
   * @default {}
   */
  headers?: { [key: string]: string }
  /**
   * The HTTP status code to send.
   * @default 200
   */
  statusCode?: number
  /**
   * If 'forceNetworkError' is truthy, Cypress will destroy the browser connection
   * and send no response. Useful for simulating a server that is not reachable.
   * Must not be set in combination with other options.
   */
  forceNetworkError?: boolean
  /**
   * Milliseconds to delay before the response is sent.
   */
  delay?: number
  /**
   * Kilobits per second to send 'body'.
   */
  throttleKbps?: number
}
2
Richard Matsen 15 kwiecień 2021, 22:17