如何让TestScheduler在RxJs5中打勾?
问题描述:
我试图在RxJs版本5中使用Observable.interval
编写一个样本单元测试。我正在运行以下代码,但是我的observable只触发一次,而不是预期的20次。如何让TestScheduler在RxJs5中打勾?
it('does its interval thing synchonously',()=> {
let x = [];
let scheduler = new Rx.TestScheduler();
let interval$ = Rx.Observable.interval(500, scheduler).take(20);
interval$.subscribe(
value => {
x.push(value);
console.log(value)
},
);
for(let i = 0; i < 20; i++) {
scheduler.flush();
}
expect(x.length).toBe(20);
});
我该如何让我的TestScheduler
将观察向前移动10000毫秒?
答
我的理解是,TestScheduler
旨在与marble testing使用,并与那些通过其createColdObservable
和createHotObservable
方法返回组成的观测工作。
相反,你可以使用VirtualTimeScheduler
- 赖以TestScheduler
是基于:即只需要一个电话flush
let scheduler = new Rx.VirtualTimeScheduler();
let interval$ = Rx.Observable.interval(500, scheduler).take(20);
let values = [];
interval$.subscribe(value => values.push(value));
scheduler.flush();
console.log(values);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>
注意。