ajax - 赛普拉斯测试 AJAX 请求之一的 500 服务器错误
问题描述
我在基于 Drupal 8 的网站上使用 Cypress 测试时遇到问题,当单击调用 AJAX 命令的按钮之一时出现 500 服务器错误,当我浏览同一页面时它工作得很好在本地,但赛普拉斯立即抛出 500 服务器错误。
正如@NoriSte 所描述的,我已经使用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的替代方法。