Cypress & Network Stubbing

Mithilfe von Cypress testen wir die Erfüllung von User Stories. Manchmal testen wir dabei konkret, ob bestimmte Calls wie erwartet durchlaufen. Wir können aber auch Antworten abfangen, verändern oder komplett simulieren. So können wir z.B. Fehlerfälle durchlaufen und prüfen, ob die UI wie gewünscht reagiert.

Zuvor: cy.server & cy.route

cy.server()
   .route({ method: 'GET', url: 'api/crm/*' }).as('excelDownload')
   [...]
   .get('button[type="submit"]').should('be.visible').click()
   .wait('@excelDownload').its('url').should('include', 'api/crm/excel?tool=CORNSEED&tenant=de')
   .get('@excelDownload').its('status').should('equal', 200);

Jetzt: cy.intercept

cy
   .intercept('GET', 'api/crm/*').as('excelDownload')
   [...]
cy.intercept(url, routeHandler?)
cy.intercept(method, url, routeHandler?)
cy.intercept(routeMatcher, routeHandler?)

Keine Methode gegeben? Dann hören wir auf alles. Der RouteMatcher sorgt für mehr Flexibilität: Vielleicht wollen wir ja nach bestimmten Headern oder Auth Credentials filtern.


Es werden mehrere Calls mit selber Methode + Endpunkt erwartet? Die Prüfung könnte so aussehen:

cy.get('@excelDownload.all').should('have.length', 2)
   .then((xhrs) => {
     // xhrs as array of network call objects
     expect(xhrs[0], 'first request status').to.have.property('status', 201)
     expect(xhrs[1], 'second request status').to.have.property('status', 201)
   })

Oder lieber einzeln prüfen? Dann so:

cy.get('@excelDownload.1').should((xhr1) => {
    expect(xhr1, 'first request').to.have.property('status', 201)
  })
  .get('@excelDownload.2').its('response.status').should('equal', 500)

Wir brauchen für den Testfall andere Beispieldaten?

Calls an den gegebenen Endpunkt können eine vordefinierte Antwort erhalten. Statische Objekte oder strings (z.B. 'success') können als Body mitgegeben werden. Oder ein Fixture:

cy.intercept('/users.json', { fixture: 'testUsers' })

Mehr in der Cypress Dokumentation📖

Wir freuen uns Sie kennen zu lernen

Hat Sie unser Angebot überzeugt? Dann freuen wir uns, Sie kennen zu lernen. Kontaktieren Sie uns gerne für ein unverbindliches Erstgespräch.

newcubator GmbH
Freie-Vogel-Straße 369
44269 Dortmund
dortmund@newcubator.com
+49 231/586 873 80
newcubator GmbH
Bödekerstraße 22
30161 Hannover
hannover@newcubator.com
+49 511/957 313 00