E2E Angular 6 websocket嘲笑

问题描述 投票:2回答:2

我们最近使用Angular 6 UI开始使用赛普拉斯进行E2E测试。它被证明是伟大的,在我们看来,比Protractor好得多。

我们的计划是模拟与服务器的所有交互。这对于使用cy.route()和fixture的所有REST / XHR调用都很容易。

但是,我们也使用Web套接字。并且嘲笑与之相互作用证明并非如此简单。

根据我迄今为止所做的研究,我能找到的唯一建议是建议使用cy.stub()。这听起来很好,但我找不到任何详细说明,理想情况下使用它来模拟Web套接字的一些例子。

我认为可能有用的另一种方法是使用Angular TestBed服务。注入您自己的服务,处理我们与Web套接字的交互。

但要么是正确的路线下降?任何人都可以提供应该做的最佳方式的任何例子吗?

任何指示让我朝着正确的方向前进,让我开始将受到大力赞赏。谢谢。

angular websocket angular6 cypress angular-e2e
2个回答
0
投票

经过多次讨论,我终于想出了自己的解决方案。基本上这来自使用ng.probe()。

特别是对于赛普拉斯,通过cy.window()函数获取对ng的访问,例如:

cy.window().then((win: any) => {
    const ngComponent = win.ng.probe(win.document.getElementsByTagName("component-name")[0].componentInstance;
    const myService = ngComponent.myService;
    myService.doSomething();
});

请注意,首先获取注入该服务的组件的句柄,即可获得服务。在我的情况下,我所关注的服务被注入app-root组件,所以我得到了一个句柄,然后我想要调用或模拟我的测试的websocket服务。


0
投票

我在工作中遇到了类似的问题,最终得到了类似的解决方案(我认为)。

我们的应用程序依赖于另一个库来做一些网络工作。我没有使用TestBed或类似的,而是使用Angular的环境文件来为e2e测试提供不同的服务,该测试遵循与真实服务相同的界面。

然后在存根服务(返回fixture数据)中,我在窗口对象上公开了方法,以便在运行时与存根进行交互,使其返回不同的数据等。

我发了一篇博客文章解释了这个方法,以及提交。

http://wtfisanapi.com/htf-do-i-write-e2e-tests-with-a-stubbed-dependency-angular-nrwl-nx-edition/

完整的代码可以在这里找到https://github.com/robt1019/e2e-stub-demo

您的解决方案是如何为您服务的?

© www.soinside.com 2019 - 2024. All rights reserved.