Quiero ejecutar varias veces la misma API con diferentes cargas útiles, pero no funciona.
it('call same api with different payload',()=>{ cy.intercept('PATCH', `**/user/1`,{name:'thava'} ).as("action1") cy.intercept('PATCH', `**/user/1`,{name:'prakash'} ).as("action2") cy.visit('../app/intercept-identical.html'); cy.get("#update-action1").click(); cy.wait(['@action1']); cy.get("#update-action2").click(); cy.wait(['@action2']); // not working })Cuando las solicitudes son idénticas, solo un routeMatcher intercepción captará todas las llamadas.
Para variar la respuesta, una forma es responder con una función
it('responds to identical requests with different responses', () => { let requestNo = 0 const responses = [ { name: 'thava' }, { name:'prakash' } ] cy.intercept('PATCH', '**/user/1', (req) => { req.reply(responses[requestNo++]) }).as('action'); cy.visit('../app/intercept-identical.html') cy.get("#update-action").click() cy.wait('@action') .its('response.body.name') .should('eq', 'thava') // passes cy.get("#update-action").click() cy.wait('@action') .its('response.body.name') .should('eq', 'prakash') // passes })Probado con
<body> <button id="update-action" onclick="clickhandler()"></button> <script> function clickhandler() { fetch('https://jsonplaceholder.typicode.com/user/1', { method: 'PATCH' }) .then(res => res.json()) } </script> </body>Nota
req.reply(res => { res.send(...) } no bloqueará la solicitud , solo modificará la respuesta del servidor en vivo. Si el servidor objetivo no puede aceptar 'PATCH', obtendrá un error.
Si actualiza a la última versión de Cypress, simplemente puede sobrescribir la intercepción.
La última intercepción agregada será la que capture la solicitud.
it('overrides intercepts', () => { cy.visit('../app/intercept-identical.html') cy.intercept('PATCH', `**/user/1`, { name:'thava' } ).as("action1") cy.get("#update-action").click() cy.wait('@action1') .its('response.body.name') .should('eq', 'thava') // passes cy.intercept('PATCH', `**/user/1`, { name:'prakash' } ).as("action2") cy.get("#update-action").click() cy.wait('@action2') .its('response.body.name') .should('eq', 'prakash') // passes })