【问题标题】:Custom command that calls another custom command won't get its value in Cypress调用另一个自定义命令的自定义命令不会在赛普拉斯中获得其值
【发布时间】:2021-12-03 00:32:48
【问题描述】:

我有一个对象,我需要修改它的一些属性。为此,我使用了自定义命令,第一个修改了其中的几个,而第二个只修改了一个,但我从第一个执行了第二个自定义命令。当我执行测试时,第二个命令修改的属性为空。 我该怎么做?

这是我的代码外观示例:

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);
})
})

【问题讨论】:

  • 如果你把所有的代码都放在前面命令,能行吗?

标签: javascript command cypress


【解决方案1】:

理想情况下,您希望具体了解每个自定义命令的返回值。

但是,Cypress 将选取自定义命令中的最后一个命令并返回它的主题。但是在firstCommand 中,最后一个命令是modifiesOtherAttr,它没有返回值或任何cy 命令,因此赛普拉斯返回undefined,这就是firstCommand 返回的内容。

既然你创建了一个新对象aBody,它应该被显式返回。

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
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多