2017-07-27 66 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>

注意。