如何在茉莉模拟rxjs webSocket ?



这是我的聊天服务:

import {webSocket, WebSocketSubject} from 'rxjs/webSocket';
import {delayWhen, retryWhen, take} from 'rxjs/operators';
import {timer} from 'rxjs';
...
export class ChatConnectionService {
private readonly _connection: WebSocketSubject<any>;
public readonly messages$: Observable<ChatInboundMessage>;
constructor() {
this._connection = this.getConnection();
this.messages$ = this._connection.asObservable();
}
private getConnection(): WebSocketSubject<any> {
return webSocket(`.../chat`);
}
}

这是我目前为止所做的尝试:

import * as rxJsWebSocket from 'rxjs/webSocket';
describe('ChatConnectionService', () => {
let service: ChatConnectionService;
const subject = new Subject();
let webSocketSpy;
beforeEach(() => {   
webSocketSpy = spyOnProperty(rxJsWebSocket, 'webSocket', 'get').and.returnValue(<any>subject);
service = new ChatConnectionService();
});
it('should create a new connection when service instantiated', () => {
expect(webSocketSpy).toHaveBeenCalledTimes(1);
});
});

但是它给了我以下错误:

Error: <spyOnProperty> : webSocket is not declared configurable

如何将webSocket替换为主题,以便我可以测试它?RxJs: 6.5.5

似乎没有很好的解决方案,这里有一个关于fromEvent算子的类似主题:错误:& lt; spyOn>: fromEvent未声明为可写或没有setter。

如果意图是直接监视操作人员,那么唯一有效的选择似乎是针对ES5,我不认为这是一个解决方案,因为部署ES6+可以减少包的大小。

我想最好的选择可能是为webSocket操作符提供包装函数。包装器函数已经可以被监视。在您的示例中,最简单的方法是为getConnection()函数设置一个间谍,该函数负责返回连接实例。

相关内容

  • 没有找到相关文章

最新更新