Tengo 2 comandos diferentes que pretendo usar uno dentro del otro. El primero genera un objeto y el segundo lo usa para enviar como cuerpo de un cy.request. se ven así
Cypress.Commands.add("objectGeneration", function(search, method, block){ let body = {} if(search === 'something') { body.search = search, body.method = method, body.block = block } return body }) Cypress.Commands.add("sendReq", (search, method, block) { cy.request({ method: 'POST', URL: 'URL', body: cy.objectGeneration(search, method, block) }) })En mi prueba, los llamo de esta manera (donde cada variable testCase proviene de un objeto auxiliar que importo a mi caso de prueba).
it("Name of the test", function(){ cy.sendReq(testCase.search, testCase.method, testCase.block).then((resp => {..}... })Al intentar ejecutar esto, aparece el siguiente error de Cypress:
El parámetro del cuerpo proporcionado a cy.request() contenía una referencia circular en el cuerpo de la ventana de especificaciones de la ruta y solo puede ser una cadena o un objeto sin referencias circulares.
Todo esto funcionaría bien cuando objectGeneration fuera solo una función y no un comando. Creo que mi problema podría tener que ver con el retorno de un comando. ¿Alguna sugerencia? Gracias
Me encontré con un problema similar al intentar enviar un valor decimal (usando decimal.js) como parte del cuerpo.
Al final serialicé el objeto yo mismo y lo envié así en la solicitud. En tu caso, creo que esto también debería funcionar:
Cypress.Commands.add("sendReq", (search, method, block) { const serialized = JSON.stringify(cy.objectGeneration(search, method, block)) cy.request({ method: 'POST', URL: 'URL', body: serialized, headers: { 'Content-Type': 'application/json' } }) })