【问题标题】:How to test RxJs WebSocket in Jasmine如何在 Jasmine 中测试 RxJs WebSocket
【发布时间】:2020-07-07 11:09:50
【问题描述】:
有一个服务可以管理 WebSocket 消息,我需要在没有 TypeScript 解决方法的情况下对其进行测试(websocket 是一个私有属性,因此没有人能够直接访问 websocket)。
Socket 连接是使用 RxJs 中的 WebSocket 建立的。
this.socket = new WebSocket(uri);.
如何测试我的服务逻辑是否适用于套接字?
【问题讨论】:
标签:
angular
rxjs
jasmine
karma-jasmine
【解决方案1】:
由于 RxJs 在内部使用 WebSocket,这是一个很容易在下一个方式中模拟的函数
const mockSocket: WebSocket = {
send: createSpy('WebSocket#send'),
} as any;
spyOn(window, 'WebSocket').and.returnValue(
mockSocket
);
现在要测试套接字处理的逻辑,只需调用由 RxJs 建立的回调。
(内部测试fakeAsync)
service.sendLargeString('string').subscribe();
tick(10);
// Mock socket opening event
mockSocket.onopen({} as any);
// Some expectations towards "send" messages
expect(mockSocket.send).toHaveBeenCalledWith('send');
tick(10);
// Mock socket closing event
mockSocket.onclose({} as any);