我们最近从 Angular 5 更新到了 Angular 6,并使用了 RxJs 6。作为迁移的一部分,计时器的使用已经从:
Observable.timer()
至
timer()
在我们的测试中有很多地方我们使用以下模式模拟计时器可观察对象。
let timerObserver: Observer<any>;
beforeEach(() => {
spyOn(Observable, 'timer').and.returnValue(Observable.create(
((observer: Observer<any>) => {
timerObserver = observer;
})
));
});
it(`should not have any notifications by default`, () => {
timerObserver.next('');
...
});
有人知道如何迁移这种模式吗?
编辑:我在这里创建了问题的简化说明:
https://stackblitz.com/edit/angular-v6-testing-template-nm7add
// Hello.Component
ngOnInit() {
const timer$ = timer(30);
timer$.subscribe(() => {
this.testMe = 'this has been changed';
});
}
// Hello.component.spec
it('should set testMe after a given timer', fakeAsync(() => {
tick(50);
expect(fixture.componentInstance.testMe).toBe('this has been changed');
}));
在这个例子中,我试图让定时器触发而不等待定时器解决。