如何在 Jasmine 中测试 RxJs WebSocket

How to test RxJs WebSocket in Jasmine

有一项管理 WebSocket 消息的服务,我需要在没有 TypeScript 解决方法的情况下对其进行测试(websocket 是私有的 属性,因此没有人能够直接访问 websocket)。

使用 RxJs 中的 WebSocket 建立套接字连接。

this.socket = new WebSocket(uri);.

如何测试我的服务逻辑是否适用于套接字?

由于 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);