在路由处理程序中,使用setTimeout()
延迟呼叫req.continue()
.
获取要等待的命令队列setTimeout
,返回一个 Promise 包装器。看请求阶段 https://docs.cypress.io/api/commands/intercept#Request-phase
如果处理程序返回 Promise,则等待 Promise 解析。
如果您希望延迟时间长于默认的命令超时 4 秒,则需要增加配置,因为cy.intercept
不采用超时选项。
Cypress.config('defaultCommandTimeout', 6000) // timeout in 6 seconds
cy.intercept('POST', '/route', (req) => {
return new Promise(resolve => {
setTimeout(() => resolve(req.continue()), 5000) // delay by 5 seconds
})
}).as('delayedRequest')
// trigger POST
cy.wait('@delayedRequest')
Cypress.config('defaultCommandTimeout', 4000) // revert to normal timeout
中间件
如果您已经有一个复杂的拦截,您可以在中间件拦截中设置延迟。
中间件始终首先执行,但如果不处理请求,则调用将传递到下一个拦截。
// request is delayed here
cy.intercept('POST', '/route', {
middleware: true // middleware always fires first
},
(req) => new Promise(resolve =>
setTimeout(() => resolve(), 5000) // no handler, just delay
)
)
// then passed to here
cy.intercept('POST', '/route',
(req) => {
req.continue() // handler for request
}
).as('delayedRequest')
// trigger POST
cy.wait('@delayedRequest')