我在 Angular 应用程序中使用 ngx-socket-io,并且我有一个组件,其中包含.subscribe
内的各种块ngOnInit()
,随后将在从服务器接收到数据时运行
我的问题是,当我ngOnInit()
在测试套件中调用时,我无法测试组件变量是否设置为某个特定订阅块内的内容,因为它将在另一个订阅块内被覆盖。
例如:
零件:
ngOnInit(): void {
this.setupBroadcastSubscriptions();
}
public setupBroadcastSubscriptions() {
this.joinGameService.isHost()
.subscribe((data: any) => {
this.hostName = data.hostName;
});
this.gameService.onUserDisconnection()
.subscribe((data: any) => {
this.toastr.info(data.message);
this.playersInLobby = data.players;
this.hostName = data.players.find(player => player.isHost).username;
});
}
测试:
test('when the first user enters a lobby, it should set the hostName to the user emitted from the server', () => {
component.ngOnInit();
expect(component.hostName).toEqual('james');
});
(为简洁起见,省略了测试套件中的模拟)
我想测试订阅hostName
内部具体发生了什么。isHost
但是,hostName
会在onUserDisconnection
订阅内被覆盖。
一种解决方案是在订阅块内创建一个方法并单独测试该方法,但我不想测试私有方法。
最好的方法是什么?