如何在 angular 8 中编写 rxjs 间隔的测试用例?

How to write test case for rxjs interval in angular 8?

我有一个方法“intervalCall()”到 app.component.ts 并使用 rxjs 间隔每 60 秒发送一次请求,所以想为 spect 文件测试它的用例,下面是方法。

intervalCall() {
    interval(60 * 1000)
      .pipe(mergeMap(() => this.XYZService.XYZmethod()))
      .subscribe((data: StatusDependents) => {
        if (data.status === 'UP') {
          location.reload();
        }
      });
  }

this.XYZService.XYZmethod() 是我每 60 秒发送一次的服务呼叫。

我已经写下下面的测试用例,仍然出现错误,1 个周期性计时器仍在队列中。

 describe('#intervalCall', () => {
    it('should call intervalCall method when status is UP', fakeAsync(() => {
      const statusData: StatusDependents = { status: 'UP' };
      const statusSpy = jest.spyOn(userService, 'statusDependents').mockReturnValue(of(statusData));
      component.intervalCall();
      fixture.detectChanges();
      tick(180500);
      expect(statusSpy).toHaveBeenCalled();
      flush();
    }));
  });

使用假异步。在这里查看它的使用方式:https://v8.angular.io/guide/testing

我发现的主要优点是您在单元测试时不会等待真正的秒数,您可以使用 tick(180500) 立即向前跳转 3 分 1/2 秒。