如何在 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 使用 MS Active Directory 登录?
如何让 cypress.io 向左滑动离子 ion-item-sliding?