在 Angular 测试中模拟 Websocket 主题

Mock Websocket Subject in Angular tests

有没有办法在 Angular 中从 Rxjs 正确模拟 websocket 主题?

我有以下服务,注入了几个组件:

import {Injectable} from '@angular/core';
import {webSocket} from "rxjs/webSocket";

@Injectable({
  providedIn: 'root'
})
export class WebsocketApi {
  public websocketSubject = webSocket("ws://localhost:8080");

  constructor() {
    this.subject.subscribe(
      event => { // do stuff with the event }
    );
  }
}

有没有一种方法可以让我轻松地在我的 WebsocketApi 规范文件或其他地方模拟主题?

谢谢。

你需要注入 webSocket 而不是直接在 class 中声明它,然后你可以模拟它。


export const WEB_SOCKET = new InjectionToken('WEB_SOCKET');

@NgModule({
  providers: [
    WebsocketApi,
    {
      provide: WEB_SOCKET,
      useFactory: () => webSocket("ws://localhost:8080"),
    },
  ],
})
export class WebSocketModule {}

@Injectable({
  providedIn: 'root'
})
export class WebsocketApi {
  constructor(@Inject(WEB_SOCKET) public websocketSubject) {
    this.subject.subscribe(
      event => { // do stuff with the event }
    );
  }
}

现在在测试中,您可以用模拟副本替换 WEB_SOCKET