微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cypress 7:cy.intercept 问题中的 onRequest

如何解决Cypress 7:cy.intercept 问题中的 onRequest

我们有以下代码断言在有请求时出现一个微调器:

以下代码在 cypress 6.4.0 中运行正常

cy.intercept({
  url: '*',onRequest: () => {
    cy.get('[data-testid=spinner-loading-indicator]')
    .should('exist')
  },});

不过在 cypress 7.5.0 中,onRequest 不再有效 我们发现的最相似的是

cy.intercept('*',(req) => {
  req.on('before:response',(res) => {
     cy.get('[data-testid=spinner-loading-indicator]').should('exist')
  })
})

这将返回一个错误,因为 Cypress 不允许这里的承诺(cy.get() 是一个承诺)

有没有人遇到过类似的问题,如果解决了怎么办?

解决方法

你可以改变

cy.get('[data-testid=spinner-loading-indicator]').should('exist')

到这里

expect(Cypress.$('[data-testid=spinner-loading-indicator]')).to.exist

不同之处在于第二个 (jQuery) 测试不会重试 - 不确定这是否会成为问题,无法从您的问题中判断事件的顺序。


测试拦截器内的加载指示器感觉有点像同时测试两件事,但时间可能会让你觉得事情很不稳定(尤其是在 CI 中)

这个序列有什么不好的原因吗?

cy.intercept('*').as('requested')

// trigger events
cy.visit('some-url')       // if initiated on load
// or
cy.get('button').click()   // if user-initiated

cy.wait('@requested')      
cy.get('[data-testid=spinner-loading-indicator]').should('exist')

就事件而言,routeHandler (req) => {...} onRequest 事件的触发,但您仍然无法调用内部命令,

即这在逻辑上等同于 onRequest 语法,

cy.intercept('*',(req) => {
  cy.get('[data-testid=spinner-loading-indicator]')        // throws an error 
})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。