抱歉,这有点混乱。我的项目在nodejs中。我正在摩卡咖啡中进行测试。在其中,我打开到geteventstore的连接并订阅流。这基本上开始发出事件。

我将该事件订阅包装在可观察的rxjs中,然后将其写入控制台。

一半的时间,我有一半的时间都没有事件流。

我感觉到eventloop开始侦听,什么也没听到,然后在geteventstore开始对事件进行爆炸之前关闭。

我有点茫然。我可以知道geteventstore在一半时间内发送数据cuz。我的理解是,只要有人订阅了某项活动,例如有一个事件监听器,循环将保持打开状态。

那么也许问题出在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,订阅对象是事件发射器,它将数据从geteventstore中抽出。

我了解到,该问题与以下事实混为一谈:它至少处理了两种不太寻常的产品,即geteventstore和rxjs。

我的意思是,我非常有信心gesConnection和subscription实际上是在连接和发出信号。我只是不知道如何进行进一步的测试/研究。

谢谢

最佳答案

我看不到您使用Mocha's async testing facilities

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;
    });

10-07 21:45