我正在ngOnInit钩子中执行initializeTimer方法。在initializeTimer中,我定义了rxjs间隔,该间隔负责递减组件Input中传递的数字。现在我要测试此方法,但是出现错误

Expected undefined to equal 9.


我不知道如何测试此订阅。我读到一些有关fakeAsync和tick的内容,但对我来说似乎不起作用。按照形式,不会触发ngOnInit。

零件

@Input() timeLeft: number;
timer: number;
observableTimer: Subscription;

constructor() { }

ngOnInit() {
  this.initializeTimer();
}

initializeTimer() {
  this.observableTimer = interval(1000).subscribe(val => {
    const timeLeft = this.timeLeft - val;
    if (timeLeft === 0) {
      this.onTimesUp();
    }
    this.timer = timeLeft;
  });
}


测试

it('expect timer to decrement', fakeAsync(() => {
  component.timeLeft = 10;
  fixture.detectChanges();
  tick(1000);
  fixture.detectChanges();
  expect(component.timer).toEqual(9);
}));

最佳答案

不幸的是,使用intervalfakeAsync测试rxjs tick存在一个长期存在的错误。您可以在此link下阅读更多有关它的信息。

10-08 18:54