作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
例如,我的组件中有私有(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();
});
此解决方案之所以有效,是因为数组表示法。在 javascript 中,您没有私有(private)或公共(public)变量:您只有变量。
Typescript 强制您遵守私有(private)/公共(public),但您始终可以解决这个问题。
如果你不想这样做,你应该创建一个公共(public)函数来创建一个像这样的订阅
createSubscription() {
this.querySubscription = this.someFunction().subscribe();
}
如果您不想使用数组表示法(我忘记说了,这根本不是一个坏习惯),这是唯一可行的解决方案。
由你来选择你喜欢的!
关于angular - 如何在 Angular 和 Jasmine 中对取消订阅进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52364687/
我是一名优秀的程序员,十分优秀!