如何使用ngx-auto-unsubscribe测试我是否已取消订阅?

时间:2018-09-25 10:20:12

标签: javascript angular typescript subscription unsubscribe

有没有一种方法可以编写单元测试来检查我是否已成功Observable取消订阅?

我正在使用ngx-auto-unsubscribe

示例:

@AutoUnsubscribe()
@Component
// Template and style urls

export class MyComp implements OnInit, OnDestroy {

   mySub: Subscription;

   constructor(private myService: MyService) { }

   ngOnInit() {
      this.myService.doSomething.subscribe(res => {
         console.log(res);
      })
   }

   ngOnDestroy() {
     // Only used for AOT (ahead of time) compilation
   }
}

1 个答案:

答案 0 :(得分:1)

是的,有一种方法(即使我认为没有必要对此进行测试)。

我不会为您编写整个测试,但这是逻辑:

  • 在测试中创建一个具有基本MockComponent条件的父组件(我们将其称为ngIf),以显示是否显示MyComp
  • 使用这样构建的另一个可观察对象从服务中模拟可观察对象:

const obsCleanUpFunction = jasmine.createSpy();

const obs$ = new Observable(observer => {
  //following will be called when/if the observable if completed
  return obsCleanUpFunction;
});
  • 创建包含MockComponent的组件MyComp
  • 运行更改检测以在ngOnInit内通过并订阅
  • 在组件MockComponent上,将显示MyComp的条件设置为false-> ngIf评估为false会破坏此条件
  • 期待茉莉间谍toHaveBeenCalled