例如,我的组件中有私有(private)类成员
private querySubscription:订阅;
。
在我的 ngOnDestroy()
中我取消订阅:
ngOnDestroy(): void {
this.querySubscription.unsubscribe();
this.userSettingsSubscription.unsubscribe();
}
如何在 jasmine 的单元测试中测试我是否真的正确取消订阅?我可以编程方式调用 ngOnDestory()
因为它是公开的,但我无法测试我的私有(private)类成员。
最佳答案
你应该模拟你的私有(private)变量(你可以通过数组表示法访问它),然后调用你的函数,并期望订阅被关闭。
it('should unsubscribe on destroy', () => {
component['querySubscription'] = of(true).subscribe();
component.ngOnDestroy();
expect(component['querySubscription'].closed).toBeTruthy();
});
编辑 1
此解决方案之所以有效,是因为数组表示法。在 javascript 中,您没有私有(private)或公共(public)变量:您只有变量。
Typescript 强制您遵守私有(private)/公共(public),但您始终可以解决这个问题。
如果你不想这样做,你应该创建一个公共(public)函数来创建一个像这样的订阅
createSubscription() {
this.querySubscription = this.someFunction().subscribe();
}
如果您不想使用数组表示法(我忘记说了,这根本不是一个坏习惯),这是唯一可行的解决方案。
由你来选择你喜欢的!
关于angular - 如何在 Angular 和 Jasmine 中对取消订阅进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52364687/