如何让TestScheduler在RxJs5中打勾?

时间:2017-07-27 22:33:56

标签: javascript rxjs rxjs5

我试图在RxJs版本5中使用Observable.interval编写样本单元测试。我运行以下代码,但我的观察结果只触发一次,而不是预期的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毫秒?

1 个答案:

答案 0 :(得分:3)

我的理解是,In [246]: n=2 In [247]: df.groupby('univ') \ .apply(lambda x: x.loc[x.ms.shift(n)==1, 'kv'].mean()) \ .reset_index(name='kv') Out[247]: univ kv 0 A 0.4 1 B NaN 旨在与marble testing一起使用,并使用由createColdObservablecreateHotObservable方法返回的可观察对象组成。

相反,您可以使用TestScheduler所基于的VirtualTimeScheduler

&#13;
&#13;
TestScheduler
&#13;
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);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

请注意,只需要进行一次<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>次呼叫。