如何解决赛普拉斯测试中的 500 服务器错误对 AJAX 请求之一
我在基于 Drupal 8 的网站上使用 Cypress 测试时遇到问题,单击其中一个调用 AJAX 命令的按钮时出现 500 服务器错误,当我浏览时它工作得很好本地相同的页面,但赛普拉斯立即抛出 500 服务器错误。
正如@NoriSte 所描述的 here,我已经使用 https://www.npmjs.com/package/cypress-wait-until cy.waitUntil
尝试了以下代码并更新了选择器等,该代码多次尝试/单击按钮但在所有请求中,AJAX 得到 500。
// This will be set to true when the XHR request starts.
let requestStarted = false
cy.server()
cy.route({
method: 'POST',url: '/the-ajax-url?*',onRequest: () => (requestStarted = true)
}).as('sendCommand');
cy.get('.the-button-selector').as('button')
cy.waitUntil(() => cy.get('@button')
.should('be.visible')
.click({force: true})
.then(() => requestStarted === true),{
timeout: 20000,interval: 1000,errorMsg: 'POST not sent `enter code here` within time limit'
})
cy.wait('@sendCommand')
我想要实现的是让这个 AJAX 请求有一段时间,所以它不会快速抛出 500 错误,而是按预期加载和工作。
注意:这个 AJAX 请求响应实际大约为 1.5 MB,不确定这是否会有所帮助。
解决方法
日志似乎表明了两件事
-
路由没有捕获 url(因为错误消息是这样说的)
- 建议使用 Cypress.minimatch 进行测试,或许可以简化为
url: '/the-ajax-url'
- 路由应指定
status: 201
,否则一旦 url 匹配,它似乎可能会捕获 500 状态并将 requestStarted 设置为 true,这不是您想要的。
- 建议使用 Cypress.minimatch 进行测试,或许可以简化为
-
cy.waitUntil()
没有等待,因为requestStarted === true
不能为真,因为路线没有捕获。- 查看此作为重试 cypress xhr request retry ontimeout 的替代方法。
cy.waitUntil()
在幕后使用递归,但并不完全清楚until
部分的工作原理。使用更简单的递归函数会让您更加清晰。
- 查看此作为重试 cypress xhr request retry ontimeout 的替代方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。