2

申し訳ありませんが、これは少し面倒です。私のプロジェクトはnodejsにあります。私はモカでテストをしています。その中で、geteventstore への接続を開き、ストリームをサブスクライブします。これにより、基本的にイベントの発行が開始されます。

そのイベント サブスクリプションを rxjs オブザーバブルでラップし、コンソールに書き込みます。

半分の時間はイベントでいっぱいのストリームを受け取りますが、半分の時間は受け取りません。

イベントループがリッスンを開始し、何も聞こえず、geteventstore がイベントで爆発を開始する前に閉じているように感じます。

私は少し途方に暮れています。geteventstore がデータを送信していることがわかります。データを取得する時間の半分です。私の理解では、誰かがイベントにサブスクライブしている限り、たとえばイベントリスナーがいる限り、ループは開いたままになります。

おそらく問題は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 という、少なくとも 2 つのやや変わった製品を扱っているという事実によって混同されていることを理解しています。

つまり、gesConnection とサブスクリプションが実際に接続され、発行されていることを確信しています。さらにテスト/調査する方法がわかりません。

ありがとう

4

1 に答える 1

1

Mocha の非同期テスト機能を利用しているとは思えません。

MochaJs は、関数が戻るのにかかる時間よりも長くテストを待機する必要があることを認識していません。

通常、promise を返します。

    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;
    });
于 2015-07-07T21:58:04.243 に答える