例如,我的组件中有私有类成员
private querySubscription: Subscription;
在我的ngOnDestroy()中,我取消订阅:
ngOnDestroy(): void { this.querySubscription.unsubscribe(); this.userSettingsSubscription.unsubscribe(); }
如何测试我在jasmine中的单元测试中是否正确取消订阅?我可以编程调用ngOnDestory(),因为它是公共的,但是我不能测试我的私有类成员。

最佳答案

你应该模拟你的私有变量(你可以通过数组记号访问),然后调用你的函数,并期望子目录被关闭。
Stackblitz

  it('should unsubscribe on destroy', () => {
    component['querySubscription'] = of(true).subscribe();

    component.ngOnDestroy();

    expect(component['querySubscription'].closed).toBeTruthy();
  });

编辑1
这个解决方案是因为数组符号。在JavaScript中,你没有私有变量或公共变量:你只有变量。
typescript强制您遵守private/public,但您可以始终围绕这一点工作。
如果您不想这样做,您应该创建一个创建订阅的公共函数,如下所示
createSubscription() {
  this.querySubscription = this.someFunction().subscribe();
}

这是唯一一个可行的解决方案,如果你不想使用数组符号(我忘了提,这根本不是一个糟糕的实践)。
由你来选择你喜欢哪一个!

10-06 00:10