Javascript 使用RxJS TestScheduler将多个订阅与一个热可观察的对象进行比较

Javascript 使用RxJS TestScheduler将多个订阅与一个热可观察的对象进行比较,javascript,system.reactive,rxjs,Javascript,System.reactive,Rxjs,我有以下getPriceStream方法要测试: import Rx from 'rx'; export default class TradingService { constructor() { this.subscribedCcyStreams = {}; } getPriceStream(ccyPair) { let existingStream = this.subscribedCcyStreams[ccyPair];

我有以下
getPriceStream
方法要测试:

import Rx from 'rx';

export default class TradingService {

    constructor() {
        this.subscribedCcyStreams = {};
    }

    getPriceStream(ccyPair) {
        let existingStream = this.subscribedCcyStreams[ccyPair];

        if (existingStream)
            return existingStream;

        let newStream = Rx.Observable.create(obs => {

                // subscribe to live service here once we have one
                var ccyStream = Rx.Observable.interval(500, Rx.Scheduler.default)
                    .map(_ => this.createFakePrice(ccyPair))
                    .subscribe(obs);

                return () => {
                    ccyStream.dispose();
                    delete this.subscribedCcyStreams[ccyPair];
                };
            })
            .replay(1)
            .refCount();

        return this.subscribedCcyStreams[ccyPair] = newStream;
    }

    createFakePrice(ccyPair) {
        return {
            ccyPair: ccyPair,
            price: Math.random() + 1,
            timestamp: Date.now()
        };
    }
}
我想测试以下内容是否具有第一个和最后一个生成匹配值的订阅(因为它们具有相同的ccy对,因此应返回相同的热可观察值),而第二个订阅应具有不同的值

tradingSvc.getPriceStream('GBPAUD').subscribe();
tradingSvc.getPriceStream('EURUSD').subscribe();
tradingSvc.getPriceStream('GBPAUD').subscribe();
对于一个订阅,我只需将
Rx.Scheduler.default
设置为使用我的
TestScheduler
,然后使用类似于以下的内容来运行调度器并记录值:

var testScheduler = new Rx.TestScheduler();
Rx.Scheduler.default = testScheduler;
var results = testScheduler.startScheduler(
    () => tradingSvc.getPriceStream('GPBAUD'), 
    {created: 0, subscribed: 0, disposed: 10000});
但是,我不知道如何对一个函数进行3次单独调用,这将产生2个不同的流。在Rx.NET中,我以前只会正常订阅
.subscribe()
这3个调用,将每个订阅的值推送到一个集合中,然后通过使用
advanceBy(x)
增量控制共享测试调度器。但是RxJS TestScheduler没有这个选项,我认为这不是推荐的方式


想法?

您在哪里发现它不支持
advanceTo
advanceBy
?它源于VirtualTimeScheduler,所以应该有它们。没有正确阅读源代码,加上JS中缺乏良好的智能感知:)谢谢。你在哪里发现它不支持
advanceTo
advanceBy
?它源于VirtualTimeScheduler,所以应该有它们。没有正确阅读源代码,以及在JS中缺乏适当的智能感知:)谢谢。