调用另一个自定义命令的自定义命令不会在 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
});