-
你不能混合同步(
while
循环;
assert.isTrue
在cy命令…)和异步工作(cy命令)之外。读
introduction to cypress #Chains-of-Commands
-
您的第一个请求是断言
resp.something
值,如果失败,则整个命令将失败,因此不再重试。
-
你在做异步工作,你不能
await
柏树命令(不管怎么说,你没有这样做),因此你需要
递归
不是
迭代
. 换句话说,你不能使用
一
虽然
循环。
像这样的东西应该管用:
Cypress.Commands.add("verifyExternalAction", (someComparisonValue) => {
const options = {
"url": some_url,
"auth": { "bearer": some_apikey },
"headers": { "Accept": "application/json" }
};
let retries = -1;
function makeRequest () {
retries++;
return cy.request(options)
.then( resp => {
try {
expect( resp.body ).to.be.gt( someComparisonValue );
} catch ( err ) {
if ( retries > 5 ) throw new Error(`retried too many times (${--retries})`)
return makeRequest();
}
return resp;
});
}
return makeRequest();
});
如果您不希望Cypress在重试期间记录所有失败的预期,请不要使用
expect
/
assert
它抛出并进行定期比较(并且可能只在
.then
回调链接到最后一个
makeRequest()
打电话)