如何对IntervalObservable进行单元测试

时间:2018-03-07 08:28:53

标签: angular typescript jasmine rxjs karma-jasmine

在我的Angular应用程序中,我使用IntervalObservable来定期执行某些操作(在我的情况下每个 5分钟):

IntervalObservable.create(300000) // 5 minutes
  .subscribe(() => {
    this.someMethodReturningObs().subscribe((data) => {
      this.myData = data;
    });
  });

我怎么能对它进行单元测试?

1 个答案:

答案 0 :(得分:2)

<强>更新

每5分钟验证一次this.myData

it("should test data for 5min interval", fakeAsync(() => { 
tick(300000);
expect(myData).toBe(testValue);
}))

旧答案

Jasmine.clock可以用于你的目的。 请查看doc

中的以下示例
beforeEach(function() {
    timerCallback = jasmine.createSpy("timerCallback");
    jasmine.clock().install();
  });
  

完成恢复后,请务必卸载时钟   原始计时器功能。

afterEach(function() {
    jasmine.clock().uninstall();
  });
  

当时钟到时,将触发对任何已注册回调的调用   通过jasmine.clock()。tick功能向前勾选,需要一个   毫秒数。

it("causes a timeout to be called synchronously", function() {
    setTimeout(function() {
      timerCallback();
    }, 100);

    expect(timerCallback).not.toHaveBeenCalled();

    jasmine.clock().tick(300000);

    expect(timerCallback).toHaveBeenCalled();
  });