我如何让 TestScheduler 在 RxJs5 中打勾?
How do I get TestScheduler to tick in RxJs5?
我正在尝试在 RxJs 版本 5 中使用 Observable.interval
编写示例单元测试。我是 运行 以下代码,但我的 observable 只触发一次,而不是 20 次,因为预期。
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
将 Observable 向前移动 10000 毫秒?
我的理解是 TestScheduler
旨在与 marble testing and works with observables composed from those returned by its createColdObservable
and createHotObservable
方法一起使用。
相反,您可以使用 VirtualTimeScheduler
- TestScheduler
所基于的:
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@5/bundles/Rx.min.js"></script>
请注意,只需要一个 flush
调用。
我正在尝试在 RxJs 版本 5 中使用 Observable.interval
编写示例单元测试。我是 运行 以下代码,但我的 observable 只触发一次,而不是 20 次,因为预期。
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
将 Observable 向前移动 10000 毫秒?
我的理解是 TestScheduler
旨在与 marble testing and works with observables composed from those returned by its createColdObservable
and createHotObservable
方法一起使用。
相反,您可以使用 VirtualTimeScheduler
- TestScheduler
所基于的:
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@5/bundles/Rx.min.js"></script>
请注意,只需要一个 flush
调用。