在 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
。
有没有办法在 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
。