柏树访问和等待超时忽略了



我创建了一个设置路由的测试,尝试访问一个页面,该页面向路线提出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的全局配置中会增加超时,但是为什么visitwait的超时?

请参阅此页面上的代码示例 - 等等 - 别名

// 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)
})

相关内容

  • 没有找到相关文章

最新更新