我试图捕获测试期间发生的所有请求。我的应用程序使用WebSocket,但使用intercept命令无法捕获wss请求。有什么方法可以做到这一点吗?
vtwuwzda1#
我不认为web套接字可以直接被拦截命令捕获。一种方法是观察ws通信的结果,如这里所示的两个Cypress runner示例之间的Testing a websocket application with Cypress。如果您的应用在应用和服务器之间进行通信,则在/cypress/plugins/index.js中启动服务器,并使用cy.task()获取通信的服务器端。还有一个库cypress-websocket-testing,它使用rxjs,这是相当强大的,但需要一些时间来适应。
/cypress/plugins/index.js
cy.task()
cy.streamRequest(config, options).then(results => { expect(results).to.not.be.undefined; }) // When in need of a bit more flexibility cy.stream(config).then(subject => { subject .pipe( takeUntil(timer(1000)), reduce((acc , val) => acc.concat([val]), []) ) .subscribe({ next: (results) => { expect(results).to.not.be.undefined; }, error: (err) => {}, complete: done }); });
q1qsirdb2#
截止到目前,Cypress中不支持cy.intercept,仅支持xhr请求,您需要创建wesbsocket服务器并在某个端口侦听,它需要在另一个进程中启动,然后使用fixture发送所需的响应数据
2条答案
按热度按时间vtwuwzda1#
我不认为web套接字可以直接被拦截命令捕获。
一种方法是观察ws通信的结果,如这里所示的两个Cypress runner示例之间的Testing a websocket application with Cypress。
如果您的应用在应用和服务器之间进行通信,则在
/cypress/plugins/index.js
中启动服务器,并使用cy.task()
获取通信的服务器端。还有一个库cypress-websocket-testing,它使用rxjs,这是相当强大的,但需要一些时间来适应。
q1qsirdb2#
截止到目前,Cypress中不支持cy.intercept,仅支持xhr请求,您需要创建wesbsocket服务器并在某个端口侦听,它需要在另一个进程中启动,然后使用fixture发送所需的响应数据