我创建了一个设置路由的测试,尝试访问一个页面,该页面向路线提出API请求,然后等待路线响应:
cy
.server()
.route('GET', '/api/testing')
.as('testing');
cy.visit('/index.html', { timeout: 60000 });
cy.wait('@testing', { timeout: 60000 });
这仅等待柏树全局默认的responseTimeout
为30秒,然后失败API请求。
这是Cypress在控制台中记录的错误消息:
赛普拉斯错误地尝试向此URL提出HTTP请求: https://localhost:4200/api/testing
错误是:
esockettimedout
堆栈跟踪是:
错误:Esockettimedout
在ClientRequest。(… node_modules cypress dist cypress resources app packages server node_modules request request request.js:778:19(
在object.oncewrapper(events.js:314:30(
在emitnone(event.js:105:13(
在ClientRequest.emit(Events.js:207:7(
在tlssocket.emittimeout(_http_client.js:722:34(
在object.oncewrapper(events.js:314:30(
在emitnone(event.js:105:13(
在tlssocket.emit(event.js:207:7(
在tlssocket.socket._ontimeout(net.js:402:8( 在Ontimeout(Timers.js:469:11(
在TryOntimeout(Timers.js:304:5(
在timer.listontimeout(timers.js:264:5(
将responseTimeout
添加到Cypress的全局配置中会增加超时,但是为什么visit
或wait
的超时?
请参阅此页面上的代码示例 - 等等 - 别名
// Wait for the route aliased as 'getAccount' to respond
// without changing or stubbing its response
cy.server()
cy.route('/accounts/*').as('getAccount')
cy.visit('/accounts/123')
cy.wait('@getAccount').then((xhr) => {
// we can now access the low level xhr
// that contains the request body,
// response body, status, etc
})
我会将then((xhr) =>
添加到您的代码中,看看会发生什么响应。
逻辑说,如果虚假路由等待全职,但是"失败的合法路由"没有,那么带有故障代码的响应在超时期内从服务器发送回。
request.js中错误的代码块有一个有趣的评论。
self.req.on('socket', function(socket) {
var setReqTimeout = function() {
// This timeout sets the amount of time to wait *between* bytes sent
// from the server once connected.
//
// In particular, it's useful for erroring if the server fails to send
// data halfway through streaming a response.
self.req.setTimeout(timeout, function () {
if (self.req) {
self.abort()
var e = new Error('ESOCKETTIMEDOUT') <-- LINE 778 REFERENCED IN MESSAGE
e.code = 'ESOCKETTIMEDOUT'
e.connect = false
self.emit('error', e)
}
})
}
这可能是您要测试的条件(即连接断开的中响应(。
不幸的是,似乎没有语法cy.wait().catch()
,请参阅命令 - are-not-promises
您不能将.catch错误处理程序添加到失败的命令中。
您可能想尝试固定路线,而不是设置服务器上的断点,但是我不确定假响应应采取什么形式。(带固执的裁判途径(
.vist((和.wait((对我不起作用,使用.request((建议使用cypress上的错误日志,而效果很好。
cy.server();
cy.request('/api/path').then((xhr) => {
console.log(xhr.body)
})