2017-07-27 30 views
4

我试图在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毫秒?

回答

3

我的理解是,TestScheduler旨在与marble testing使用,并与那些通过其createColdObservablecreateHotObservable方法返回组成的观测工作。

相反,你可以使用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>

注意。