我需要以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"
}
}
答案 0 :(得分:0)
这里的问题是if条件语句。这不是您要实现的正确语法:
if(user[role] === "dispatcher" || "provider" || "reviewer") {
...
}
它的基本含义是“用户角色是'dispatcher'还是true或true”,并且可以缩写为“ true”。这是因为任何非空字符串在js中总是“真实的”。
您需要为每个“或”组重复比较,如下所示:
if(user[role] === "dispatcher" || user[role] === "provider" || user[role] === "reviewer") {
...
}
或者最好是这样:
if(["dispatcher", "provider", "reviewer"].includes(user[role])) {
...
}
答案 1 :(得分:0)
您不应该测试
if (user[role] === "driver")
和
if (["dispatcher", "provider", "reviewer"].includes(user[role]))
因为user[role]
是灯具对象。
您应该测试
if (role === "driver")
和
if (["dispatcher", "provider", "reviewer"].includes(role))
不确定是否可以解决所有问题,但这显然是第一步。
答案 2 :(得分:0)
感谢您的评论!我已经通过定义另一个const来存储该问题的方法来解决此问题,该const用来存储从另一页获得的用户实际角色的值,然后将其用作条件。