Tengo un objeto y necesito modificar algunos de sus atributos. Para esto estoy usando comandos personalizados y el primero modifica un par de ellos cuando el segundo modifica solo uno pero ejecuto el segundo comando personalizado del primero. Cuando ejecuto mi prueba, el atributo modificado por el segundo comando es nulo. ¿Cómo puedo hacer esto?
Aquí hay una muestra de cómo se ve mi código:
Cypress.Commands.add("firstCommand", (varA, objectB) => { let aBody = {}; aBody.a = varA; cy.modifiesOtherAttr(aBody, objectB); }) Cypress.Commands.add("modifiesOtherAttr", (aBody, objectB) => { aBody.b = objectB.attrb; })Entonces mi prueba solo llama al primer comando
describe("a suite name", () => { it("my test name", () => { cy.firstCommand(variable, object); }) })Idealmente, desea ser específico sobre el valor de retorno de cada comando personalizado.
Sin embargo, Cypress recogerá el último comando dentro del comando personalizado y devolverá su asunto. Pero dentro de firstCommand el último comando es modifiesOtherAttr , que no tiene un valor de retorno ni ningún comando cy , por lo que Cypress devuelve undefined , que es lo que devuelve firstCommand .
Dado que crea un nuevo objeto aBody , debe devolverse explícitamente.
Cypress.Commands.add("firstCommand", (varA, objectB) => { let aBody = {}; aBody.a = varA; cy.modifiesOtherAttr(aBody, objectB) cy.wrap(aBody) // this is the return value }); Cypress.Commands.add("modifiesOtherAttr", (aBody, objectB) => { aBody.b = objectB.attrb // "side effect" happens here, nothing returned });O
Cypress.Commands.add("firstCommand", (varA, objectB) => { let aBody = {}; aBody.a = varA; cy.modifiesOtherAttr(aBody, objectB) // this is the return value }); Cypress.Commands.add("modifiesOtherAttr", (aBody, objectB) => { aBody.b = objectB.attrb cy.wrap(aBody) // this is the return value });explícito es mejor
Cypress.Commands.add("firstCommand", (varA, objectB) => { let aBody = {}; aBody.a = varA; cy.modifiesOtherAttr(aBody, objectB) return cy.wrap(aBody) // this is the return value }); Cypress.Commands.add("modifiesOtherAttr", (aBody, objectB) => { aBody.b = objectB.attrb return cy.wrap(aBody) // this is the return value });