调用另一个自定义命令的自定义命令不会在 Cypress 中获得其值
Custom command that calls another custom command won't get its value in Cypress
我有一个对象,我需要修改它的一些属性。为此,我使用自定义命令,第一个修改其中几个,而第二个只修改一个,但我从第一个执行第二个自定义命令。当我执行测试时,第二个命令修改的属性为空。
我该怎么做?
这是我的代码的示例:
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;
})
那么我的测试只调用第一个命令
describe("a suite name", () => {
it("my test name", () => {
cy.firstCommand(variable, object);
})
})
理想情况下,您希望具体说明每个自定义命令的 return 值。
但是,Cypress 会选择自定义命令中的最后一个命令,return 它是主题。但是在 firstCommand
中,最后一个命令是 modifiesOtherAttr
,它没有 return 值或任何 cy
命令,所以 Cypress returns undefined
那么 firstCommand
returns.
由于您创建了一个新对象 aBody
,因此应该明确 returned。
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
});
或
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
});
显式更好
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
});
我有一个对象,我需要修改它的一些属性。为此,我使用自定义命令,第一个修改其中几个,而第二个只修改一个,但我从第一个执行第二个自定义命令。当我执行测试时,第二个命令修改的属性为空。 我该怎么做?
这是我的代码的示例:
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;
})
那么我的测试只调用第一个命令
describe("a suite name", () => {
it("my test name", () => {
cy.firstCommand(variable, object);
})
})
理想情况下,您希望具体说明每个自定义命令的 return 值。
但是,Cypress 会选择自定义命令中的最后一个命令,return 它是主题。但是在 firstCommand
中,最后一个命令是 modifiesOtherAttr
,它没有 return 值或任何 cy
命令,所以 Cypress returns undefined
那么 firstCommand
returns.
由于您创建了一个新对象 aBody
,因此应该明确 returned。
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
});
或
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
});
显式更好
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
});