对不起,这个有点乱。我的项目是在nodejs。我在摩卡测试。在其中我打开了与geteventstore的连接并订阅了一个流。这基本上开始发射事件。
我将该事件订阅包装在rxjs observable中,然后将其写入控制台。
有一半的时间我在一半的时间内得到了充满活动的信息流。
我感觉到eventloop开始倾听,没有听到任何声音并关闭,然后geteventstore才能开始用事件进行爆破。
我有点失落。我可以告诉geteventstore发送数据的时间是我得到它的一半时间。我的理解是,只要有人订阅了一个事件,例如有一个eventlistener,循环将保持打开状态。
所以问题可能在于rxjs?
我不知道,任何帮助将不胜感激。
---- EDIT
我不知道这是否会有所帮助,但测试看起来像这样。
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和订阅实际上是连接和发送的。我只是不知道如何进一步测试/调查。
谢谢
答案 0 :(得分:1)
我没有看到你使用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;
});