Rodzaje asercji w Cypress: praktyczny przewodnik z przykładami

Asercje to serce każdego testu – bez nich nasze skrypty to tylko „klikanie bez sensu”.
W Cypressie mamy do dyspozycji naprawdę rozbudowany zestaw możliwości: od prostych sprawdzeń obecności elementów, przez warunki logiczne, aż po zaawansowane sprawdzanie danych czy odpowiedzi z API.
W tym wpisie pokażę Ci najważniejsze rodzaje asercji w Cypress, podzielone tematycznie – i wyjaśnię, kiedy warto ich używać (a kiedy niekoniecznie).

cypress asercje

1. Co to jest asercja?

Krótka definicja:

Asercja to warunek, który musi zostać spełniony, aby test uznać za poprawny. Jeśli nie zostanie spełniony – test się wywala.

Przykład:

cy.get('.button').should('be.visible')

 

2. Podział asercji w Cypress

✅ Asercje podstawowe (domyślne matchery)

  • should('exist')

  • should('be.visible')

  • should('contain', 'Tekst')

  • should('have.class', 'active')

Kiedy używać:
Do sprawdzania obecności, widoczności, zawartości tekstu – najczęstsze przypadki UI.

🧪 Asercje logiczne i zagnieżdżone

  • should('not.exist')

  • .and('have.attr', 'href', '/home')

  • should('include.text', 'Witaj')

Tip: Możesz łączyć kilka asercji:

cy.get('button')
  .should('be.visible')
  .and('have.text', 'Zaloguj się')

🧠 Asercje z funkcją callback

cy.get('ul li').should(($items) => {
  expect($items.length).to.eq(5)
})

Kiedy używać:
Gdy potrzebujesz bardziej złożonej logiki – np. sprawdzić długość, warunki niestandardowe, zawartość kolekcji.

 

🌐 Asercje po zapytaniach API (Cypress + cy.request())

cy.request('/api/users').then((response) => {
  expect(response.status).to.eq(200)
  expect(response.body).to.have.length.greaterThan(0)
})

Kiedy używać:
Podczas testów backendu lub API bez interfejsu graficznego.

 

🧷 Asercje na danych (z cy.fixture() lub cy.readFile())

 cy.fixture('user.json').then((user) => {
expect(user.name).to.equal('Rafał')
})

Kiedy:
Gdy testujesz uploady, downloady lub konkretne dane wejściowe.

 

🚫 Błędy, które często się pojawiają

  • Użycie should('not.exist') na elementach, które są ładowane z opóźnieniem (zbyt szybkie sprawdzanie)

  • should('have.text', 'coś') zamiast should('contain', 'coś') – i test pada na białych znakach

  • Brak zagnieżdżeń (.and()) i chaotyczne powtarzanie get().should()

 

Podsumowanie – jak pisać dobre asercje?

  1. Nie sprawdzaj „bo tak” – każda asercja powinna mieć sens biznesowy.

  2. Używaj .and() zamiast wielu should(), gdy testujesz jeden element.

  3. Unikaj zbyt ogólnych warunków typu should('exist') – precyzja = jakość testu.

Dostępne szkolenia

pakiet premium