2016-10-31 20 views
0

モカテストはデバッグモードで実行すると成功しますが、実行モードでは失敗します(私はWebStormを使用しています)。私はテストで何をやったかモカテストは実行に失敗しますが、デバッグモードで成功します

がある:ランモードで

it("test messenger", function(done){ 
    messenger.send(message, callback); 
    //the messenger will save messages temporarily 
    //and send them to outside message queue(nsq) every 1 second (using setInterval) 

    reader.connect(nsq)... ; 

    reader.on('message', function(message){ 
     //validate message ... 
     done(); 
    }); 
}) 

、それは常に

...読み込みコールバックがトリガが、デバッグモードで、それは成功していなかったことを意味する、タイムアウト

私はタイムアウトで受信コードをスケジュールする場合、それは実行モードで成功します:

it("test messenger", function(done){ 
    messenger.send(message, callback); 
    //the messenger will save messages temporarily 
    //and send them to outside message queue(nsq) every second (using setInterval) 
    setTimeout(function(){ 
     reader.connect(nsq) 
     reader.on('message', function(message){ 
     //validate message ... 
     done(); 
    }, 1000) 

    }); 
}) 

私の推測では、モカは、いくつかの場所紡績で立ち往生するということですので、コールバック・イベントが幹部を取得する機会を持っていませんデバッグモードでは、何とかそれが起動されます。

質問:

  1. は私の推測が正しいのですか?
  2. モカのスピニングコードはどうやって見つかりますか?私は--profオプションでmochaを実行しましたが、chrome chrome://tracingを使用してプロファイリングを読み込みましたが、場所を見つける方法はわかりませんでした。添付

V8のログファイルですlog

答えて

0

モカは、それが呼び出されるdone()コールバック用のを待って、回転しません。

キューやリーダーに問題があるようです。おそらく、messageイベントは、リーダーを空のキューに添付したり、メッセージが到着する前に起動しませんか?デバッグを進めたり、遅延を追加すると、すでに入力されたキューに接続することができます。

readermessageイベントを生成するものにブレークポイントを設定して、両方のシナリオで発生するかどうかを確認する必要があります。

+0

イベントが発生していませんでしたデバッグモードでは起動しました。リーダ接続時にキューが空であっても、後者の送信メッセージはクライアント側を起動するはずです。 – Jerrylk

0

私は原因を見つけた:

だけnsqlookupd提供、nsq.jsは、クライアントが利用可能nsqdを見つけるために、nsqlookupdサーバごとに20秒をポーリングしますので、読み取りクライアントが接続したときに読めば、何nsqdはありません現在指定されたトピックでは、書き込みクライアントがnsqdサーバーにメッセージを送信した後、読み取りクライアントのメッセージハンドラを20秒後に起動する必要があります。そのため、mochaのタイムアウトが発生します。実行モードでのデバッグモードで

、テストは20秒が経過していることとても遅い実行され、読者は再びサーバーをlookupdの、指定されたメッセージで更新nsqdサーバーを見つけるために行くだろう...

関連する問題