如何在 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);
有一项管理 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);