首页 > 解决方案 > 怎么修; “if-else”语句跳过“if”部分,直接进入“else if”部分?

问题描述

我需要使用 5 个不同的角色登录并检查他们是否有正确的选项卡来根据他们的角色进行导航。

但问题是;它以“司机”角色登录并检查“rides.title”和“chauffeurs.title”。由于“司机”角色不包括“chauffeurs.title”,因此测试失败。

它跳过“if”部分并直接进入“else if”部分。

我尝试了什么:

我试图测试我的循环是否运行良好,显然它运行良好。

我删除了整个 if 块并粘贴了下面的代码,看到它一个一个地登录了每个角色并检查了“rides.title”。

.visit('/planned')
          .get('[data-qa="rides.title"')
          .should('exist')
          .get('[data-qa="logout"]')
          .click()

除了最后一个角色;因为它没有“rides.title”,这很好。

这是完整的代码,用于查看并获取有关我到目前为止所做的更多信息:

const roles = ["driver", "dispatcher", "provider", "reviewer", "admin"];

it("Navigation items for a single permission", () => {
  cy.fixture("users.json").then(users => {
    const user = users[Cypress.env("ENVIRONMENT")];
    roles.forEach(role => {
      cy.login(user[role], Cypress.env("DEFAULT_USER_PASSWORD")).then(
        response => {
          cy.setCookie("__bl_pp__", response.body.result.access_token);
          if (user[role] === "driver") {
            cy.visit("/planned")
              .get('[data-qa="rides.title"')
              .should("exist")
              .get('[data-qa="logout"]')
              .click();
          } else if (["dispatcher", "provider", "reviewer"].includes(user[role])) {
            cy.visit("/planned")
              .get('[data-qa="rides.title"')
              .should("exist")
              .get('[data-qa="chauffeurs.title"')
              .should("exist")
              .get('[data-qa="logout"]')
              .click();
          } else {
            cy.visit("/planned")
              .get('[data-qa="chauffeurs.title"')
              .should("exist")
              .get('[data-qa="logout"]')
              .click();
          }
        })
      })
    })
  })
})

预期的情况应该是;测试应该使用 5 个不同的角色登录并验证可用的选项卡,如上面的代码中所述。

Role        Navigation Tabs
Driver      Rides
Dispatcher  Rides, Chauffeurs
Provider    Rides, Chauffeurs
Reviewer    Rides, Chauffeurs
Admin       Chauffeurs

提前致谢!

这是我的 users.json 文件:

{
  "development": 
  {
    "driver": "aa+driver@b.com",
    "dispatcher": "bb+dispatcher@b.com",
    "provider": "cc+provider@b.com",
    "reviewer": "dd+reviewer@b.com",
    "admin": "ee+admin@b.com"
  }
}

标签: javascriptcypress

解决方案


感谢您的意见!我已经通过定义另一个常量来存储我从另一个页面获得的用户实际角色的值来解决这个问题,然后我将其用作条件。


推荐阅读