【问题标题】:500 Server Error in Cypress tests to one of the AJAX request赛普拉斯测试 AJAX 请求之一的 500 服务器错误
【发布时间】:2021-01-11 19:30:58
【问题描述】:

我在基于 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,不确定这是否有帮助。

【问题讨论】:

  • 如果你注释掉服务器和路由行,它的工作方式和你从浏览器运行时一样吗?
  • 不,在这两种情况下有/没有赛普拉斯都没有按预期工作,即 AJAX 请求正在本地/远程完成,没有任何问题,但我正在尝试执行相同的 AJAX 请求Cypress 测试,自发报500 Server Error。
  • 你能显示实际的错误输出和堆栈跟踪吗?
  • @RosenMihaylov,将图片添加到问题中,这是您要问的吗?
  • 是的,这对我来说是一个陌生的问题,但像这样更有可能有人能够帮助你

标签: ajax drupal cypress wait


【解决方案1】:

日志似乎表明了两件事

  1. 路由未捕获 url(因为错误消息是这样说的)

    • 建议使用Cypress.minimatch 进行测试,或许可以简化为url: '/the-ajax-url'
    • 路由应该指定status: 201,否则一旦 url 匹配,它似乎可能会捕获 500 状态并将 requestStarted 设置为 true,这不是您想要的。
  2. cy.waitUntil() 没有等待,因为requestStarted === true 不可能为真,因为路由没有捕获。

    • 查看此作为重试cypress xhr request retry ontimeout 的替代方法。 cy.waitUntil() 在底层使用递归,但尚不完全清楚 until 部分如何工作。使用更简单的递归函数会让你更清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-14
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2021-10-20
    相关资源
    最近更新 更多