Node.js 使用rxjs的集成测试geteventstore具有竞争条件

Node.js 使用rxjs的集成测试geteventstore具有竞争条件,node.js,rxjs,event-loop,eventstoredb,Node.js,Rxjs,Event Loop,Eventstoredb,对不起,这个有点乱。我的项目是nodejs。我在摩卡考试。在其中,我打开了到geteventstore的连接并订阅了一个流。这实际上是开始发出事件 我将该事件订阅包装在rxjs observable中,然后将其写入控制台 有一半的时间我会收到一条充满事件的信息流,有一半的时间我不会 我感觉到eventloop开始监听,没有听到任何声音,在geteventstore开始用事件来破坏它之前关闭 我有点不知所措。我可以看出geteventstore正在发送数据,因为我有一半的时间收到它。我的理解是,只

对不起,这个有点乱。我的项目是nodejs。我在摩卡考试。在其中,我打开了到geteventstore的连接并订阅了一个流。这实际上是开始发出事件

我将该事件订阅包装在rxjs observable中,然后将其写入控制台

有一半的时间我会收到一条充满事件的信息流,有一半的时间我不会

我感觉到eventloop开始监听,没有听到任何声音,在geteventstore开始用事件来破坏它之前关闭

我有点不知所措。我可以看出geteventstore正在发送数据,因为我有一半的时间收到它。我的理解是,只要有人订阅了某个事件,例如有eventlistener,循环就会保持打开状态

那么也许问题出在rxjs上

我不知道,任何帮助都将不胜感激

----编辑

我不知道这是否有帮助,但测试结果是这样的

context('when calling subscription', ()=> {
    it('should stay open', function () {
        mut = bootstrap.getInstanceOf('gesConnection');
        var rx = bootstrap.getInstanceOf('rx');
        var subscription = mut.subscribeToAllFrom();

        rx.Observable.fromEvent(subscription, 'event').forEach(x=> console.log(x));

        subscription.on('event', function (payload) {
            console.log('event received by dispatcher');
            console.log('event processed by dispatcher');
        });
        mut._handler._connectingPhase.must.equal('Connected');
    })
});
因此mut是到geteventstore的连接,rx是rxjs,subscription对象是从geteventstore输出数据的事件管理器

我知道这个问题被至少两个有点不寻常的产品——geteventstore和rxjs——所困扰

我的意思是我很有信心连接和订阅实际上是连接和发射的。我只是不知道如何进一步测试/调查


谢谢

我看不出你在利用我

MochaJs不知道等待测试的时间应该比函数返回的时间长

通常你会回报一个承诺:

    it('must stay open', () => {
        mut = bootstrap.getInstanceOf('gesConnection');
        var rx = bootstrap.getInstanceOf('rx');
        var subscription = mut.subscribeToAllFrom();

        subscription.on('event', function (payload) {
            console.log('event received by dispatcher');
            console.log('event processed by dispatcher');
        });

        var promise = rx.Observable
            .fromEvent(subscription, 'event')
            .take(100) // stop test after 100 events
            .do(x => console.log(x))
            .finally(() => {
                // do any cleanup here.
                // such as close your connection
                // or "subscription" variable
            })
            .toPromise();

        mut._handler._connectingPhase.must.equal('Connected');

        // tells Mocha to wait until the observable completes
        return promise;
    });

如果没有看到一些代码,我们就帮不了你。你知道吗?这是令人尴尬的事实。我刚刚实现了这一点,添加了done方法,得到了一张满是数据的脸。但是,你的示例确实有帮助,因为我的事件流并没有真正停止。take(100)这正是我需要的。而且,toPromise方法似乎也很方便。谢谢。