【发布时间】:2018-09-09 20:13:29
【问题描述】:
我创建了一个测试,在其中设置了一个路由,尝试访问一个向路由发出 API 请求的页面,然后等待路由响应:
cy
.server()
.route('GET', '/api/testing')
.as('testing');
cy.visit('/index.html', { timeout: 60000 });
cy.wait('@testing', { timeout: 60000 });
这只会等待赛普拉斯全局默认 responseTimeout 30 秒,然后 API 请求失败。
这是 Cypress 在控制台中记录的错误消息:
Cypress 尝试向此 url 发出 http 请求时出错: https://localhost:4200/api/testing
错误是:
ESOCKETTIMEDOUT
堆栈跟踪是:
错误:ESOCKETTIMEDOUT
在客户端请求。 (...\node_modules\cypress\dist\Cypress\resources\app\packages\server\node_modules\request\request.js:778:19)
在 Object.onceWrapper (events.js:314:30)
在 emitNone (events.js:105:13)
在 ClientRequest.emit (events.js:207:7)
在 TLSSocket.emitTimeout (_http_client.js:722:34)
在 Object.onceWrapper (events.js:314:30)
在 emitNone (events.js:105:13)
在 TLSSocket.emit (events.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 添加到赛普拉斯的全局配置会增加超时,但为什么visit 或wait 的超时没有发生?
【问题讨论】:
-
我想你已经在 cypress.json 中设置了一个 baseUrl?因为
cy.visit('/index.html')本身可能不会导航到主页。 -
超时对我来说没问题 - 如果我输入一个虚假的 route(),它会等待完整的 60 秒然后失败。单击失败的命令会在控制台中显示
Error: CypressError: Timed out retrying: cy.wait() timed out waiting 60000ms for the 1st request to the route: 'testing'. No request ever occurred。 -
正确,正在使用 baseUrl。尝试虚假路线它也在等我。但是当使用合法路由并暂停服务器响应时,在服务器代码中使用调试器时,它只等待
responseTimeout。 -
干杯,这澄清了一些事情。我想知道如何在不停止被测整个应用程序的情况下停止特定路线(因为所讨论的路线看起来与应用程序相关)。对不起,如果我错过了一些明显的东西。
-
服务器应用是在 Visual Studio 中运行的 .Net Core。在 index.html 页面上由 JavaScript 调用的 API 控制器中设置了一个断点。所以整个页面都提供给浏览器,JavaScript 执行,将请求发送回服务器上的 API 控制器,到达断点,我再也没有继续,所以发生了超时。这有帮助吗?感谢您花时间考虑这个问题。
标签: timeout e2e-testing cypress