如何在Cypress中重复、循环XHR请求、处理多个XHR请求
如何在测试前通过间隔请求? 我尝试了两种方法来重试请求,但都失败了 我需要上传一个文件,等待一个成功导入 在第一步中,我将一个文件上传到cypress中的服务器如何在Cypress中重复、循环XHR请求、处理多个XHR请求,cypress,Cypress,如何在测试前通过间隔请求? 我尝试了两种方法来重试请求,但都失败了 我需要上传一个文件,等待一个成功导入 在第一步中,我将一个文件上传到cypress中的服务器 before( ()=> { //my custom POST command cy.form_request(url, data) .then(({id}) => { 然后我等待上传文件的id check_It_Till_Success_It(id);
before( ()=> {
//my custom POST command
cy.form_request(url, data)
.then(({id}) => {
然后我等待上传文件的id
check_It_Till_Success_It(id);
})
})
然后,我将收到的id传递到一个新请求中,以验证其在服务器上的状态,并需要重复该请求,直到文件处理完成。
下面的解决方案是
CypressError:cy.wait()只接受路由的别名。
别名“check\u it\u request”与路由不匹配。
或者这里是另一个通过递归请求的my解决方案:
function check_It_Till_Success_It(id) {
return (
cy.request("GET", BASE_URL + "/admin/api/catalog/import/status/" + id)
.then(({status}) => {
if (status === "FINISHED" || status === "FAILED") {
console.log('success');
} else {
console.log('retry one more time');
setTimeout(() => check_It_Till_Success_It(id), 1000)
}
})
)
}
但它抛出了一个错误:
未捕获的CypressError:Cypress检测到您从一个命令返回了一个承诺,同时还调用了该承诺中的一个或多个cy命令。
我做错了什么?我发现我的mystake是因为使用了本机JS工具setTimeout、setInterval Cypress不允许使用它们,并用可控方法替换:cy.clock和cy.tick 因此,我采用递归实现,并用上述方法替换,我的代码变成:
function check_It_Till_Success_It(id) {
cy.request("GET", BASE_URL + "/admin/api/catalog/import/status/" + id)
.then(resp => {
const status = resp.body.status;
if (status === "FINISHED" || status === "FAILED") {
console.log('success');
} else {
console.log('retry one more time');
cy.clock();
cy.tick(1000);
check_It_Till_Success_It(id)
}
})
}
主题外注释:我是Cypress的新手,据我所知,它取代了大多数js本机功能,因此需要更仔细地查看文档(宾果!),或者查看,因为某些js特定功能只是在没有任何通知或捕获错误的情况下崩溃Cypress,例如:FormData对象使Cypress的请求方法崩溃
function check_It_Till_Success_It(id) {
cy.request("GET", BASE_URL + "/admin/api/catalog/import/status/" + id)
.then(resp => {
const status = resp.body.status;
if (status === "FINISHED" || status === "FAILED") {
console.log('success');
} else {
console.log('retry one more time');
cy.clock();
cy.tick(1000);
check_It_Till_Success_It(id)
}
})
}