我是 Cypress 和 JavaScript 的新手。我想创建一个循环来执行具有不同值的请求,直到获得特定响应。
let continue_loop = 1;
loginLoop: for (let i = 1; i < 100; i++) {
cy.request({
// url: Cypress.env("web_api")+"/1.0/user/login",
url: Cypress.env("api").staging + "/1.0/user/login",
method: "POST",
failOnStatusCode: false,
body: {
email: "email" + i + "@email.com",
password: "Helloworld10",
},
}).then((response) => {
if (response.status == 403) {
continue_loop = 2;
}
});
if (continue_loop == 2) {
break loginLoop;
}
}
看起来
continue_loop
只能在then块中获取值2
,因为之后它总是返回1,所以循环永远不会中断。我也尝试使用 Cypress 别名,但结果相同。我怎样才能实现这个目标?
Cypress 不使用承诺,这很烦人,但你可以将事情变成你可以等待的承诺:
for (let failures = 0, i = 1; failures < 2 && i < 100; i++) {
await new Promise(resolve => {
cy.request({
...,
}).then((response) => {
if (response.status == 403) {
failures++;
}
resolve();
});
});
}