gpt4 book ai didi

angular - 如何在 Angular 和 Jasmine 中对取消订阅进行单元测试?

转载 作者:太空狗 更新时间:2023-10-29 18:02:37 25 4
gpt4 key购买 nike

例如,我的组件中有私有(private)类成员

private querySubscription:订阅;

在我的 ngOnDestroy() 中我取消订阅:

ngOnDestroy(): void {
this.querySubscription.unsubscribe();
this.userSettingsSubscription.unsubscribe();
}

如何在 jasmine 的单元测试中测试我是否真的正确取消订阅?我可以编程方式调用 ngOnDestory() 因为它是公开的,但我无法测试我的私有(private)类成员。

最佳答案

你应该模拟你的私有(private)变量(你可以通过数组表示法访问它),然后调用你的函数,并期望订阅被关闭。

Stackblitz

  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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com