【发布时间】:2019-01-15 12:25:06
【问题描述】:
我需要使用 5 个不同的角色登录,并检查他们是否有正确的选项卡来根据他们的角色进行导航。
但问题是;它以“司机”角色登录并检查“rides.title”和“chauffeurs.title”。由于 'driver' 角色不包含“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"
}
}
【问题讨论】:
-
(user[role] === 'dispatcher' || 'provider' || 'reviewer')将始终是真实的,因为'provider'是真实的。 -
为了澄清 Xufox 的评论,如果角色不是“调度员”,那么
(user[role] === 'dispatcher' || 'provider' || 'reviewer')将评估为(false || true || true),然后当然将评估为true。你所做的并不是你如何编写一个 if 语句来测试多个值,你必须在每个子句中重述参数的每一侧,即(user[role] === 'dispatcher' || user[role] === 'provider' || user[role] === 'reviewer')。||s 中的每一位都是单独评估的……它不是选项列表。我建议你回顾一下你对 JS 语法的理解。 -
Concise way to compare against multiple values 的可能重复项。
includes方法目前是最佳实践。 -
user[role]应该是什么?似乎您正在尝试获得类似user.dispatcher的内容,但是……然后您也将其与字符串“dispatcher”进行了比较。似乎您要么需要检查user.role这是该块顶部的字符串之一,要么您有user.dispatcher = true、user.driver = true、user.provider = false等。或者完全是其他的东西。基本上,我认为user[role]是不正确的。 -
@ZiyaI.Erogul 但
user[role]将检查每个对象的user.dispatcher、user.driver等属性。拥有user.dispatcher = "dispatcher"似乎很奇怪,因为当你执行user[role] === "dispatcher"时,你会检查它是否已设置。这真的是您的user对象所拥有的吗?还是您设置了(更合乎逻辑的)属性user.role = "dispatcher"或类似user.dispatcher = true的东西?两者都是正常的,但就目前而言,您预计这两种方法会有一些非正统的混合。
标签: javascript cypress