如何在 Cypress.io 中等待 WebSocket STOMP 消息

Posted

技术标签:

【中文标题】如何在 Cypress.io 中等待 WebSocket STOMP 消息【英文标题】:How to wait for WebSocket STOMP messages in Cypress.io 【发布时间】:2018-06-17 09:00:33 【问题描述】:

在我的一项测试中,我想等待 WebSocket STOMP 消息。 Cypress.io 可以做到这一点吗?

【问题讨论】:

【参考方案1】:

如果您要访问的 websocket 正在由您的应用程序建立,您可以遵循以下基本流程:

    从您的测试中获取对WebSocket 实例的引用。 将事件侦听器附加到WebSocket。 返回一个Cypress Promise,当您的WebSocket 收到消息时该Cypress Promise 被解析。

这对我来说有点难以测试,没有一个工作的应用程序,但这样的东西应该可以工作:

在您的应用程序代码中:

// assuming you're using stomp-websocket: https://github.com/jmesnil/stomp-websocket

const Stomp = require('stompjs');

// bunch of app code here...

const client = Stomp.client(url);
if (window.Cypress) 
  // running inside of a Cypress test, so expose this websocket globally
  // so that the tests can access it
  window.stompClient = client

在您的赛普拉斯测试代码中:

cy.window()         // yields Window of application under test
.its('stompClient') // will automatically retry until `window.stompClient` exists
.then(stompClient => 
  // Cypress will wait for this Promise to resolve before continuing
  return new Cypress.Promise(resolve => 
    const onReceive = () => 
      subscription.unsubscribe()  // clean up our subscription
      resolve()                   // resolve so Cypress continues
    
    // create a new subscription on the stompClient
    const subscription = stompClient.subscribe("/something/you're/waiting/for", onReceive)
  )
)

【讨论】:

如果实现代码超出我的控制范围怎么办 - 我仍然可以在我的 Cypress 测试中拦截 websocket 消息(类似于 cy.intercept(uri) )?

以上是关于如何在 Cypress.io 中等待 WebSocket STOMP 消息的主要内容,如果未能解决你的问题,请参考以下文章

访问新窗口 - cypress.io

如何使用 Cypress.io 使用 MS Active Directory 登录?

如何让 cypress.io 向左滑动离子 ion-item-sliding?

Cypress.io 如何处理异步代码

在 github 操作中使用 .shadow() 和 cypress.io

Cypress.io 代码覆盖率发布到 azure devops