例如,我的组件中有私有类成员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();
}
这是唯一一个可行的解决方案,如果你不想使用数组符号(我忘了提,这根本不是一个糟糕的实践)。
由你来选择你喜欢哪一个!