2016-10-10 21 views
0

mochaを使って書いたテストのconsole.loggingの中で、私の端末には本当に一貫した動作が得られません。 node.jsサーバーを実行し、socket.ioを実行しています。何らかの理由でconsole.logが端末の一部にしか行きませんか?私はこの行動について本当に混乱しています。Node.jsのMochaでのテスト

➜ tests git:(master) ✗ mocha test-chat-server.js 
hello world 


echo 
✓ echos message (68ms) 

On Connect Things Should Happen 
✓ initial connection events 
    disconnected 
    i'm here 


    2 passing (93ms) 

➜ tests git:(master) ✗ mocha test-chat-server.js 
    hello world 


    echo 
     ✓ echos message (61ms) 

    On Connect Things Should Happen 
     ✓ initial connection events 


    2 passing (77ms) 

私はモカテストを実行したこれら2つの時間の間の違いは、(私はここよ、切断)最初のテスト実行中に表示されるにconsole.log文です。彼らは私が走った2回目のテストには出てこない。

編集:コメントに反応して、私のテストコードを投稿(ありがとう!)

var should = require('should'); 
var socket = require('socket.io-client')('http://localhost:3000'); 


describe("echo", function() { 
    var server, 
     options ={ 
      transports: ['websocket'], 
      'force new connection': true 
     }; 

    it("echos message", function (done) { 
     var client = socket.connect("http://localhost:3000", options); 

     client.once("connect", function() { 
      client.once("echo", function (message) { 
       message.should.equal("Hello World"); 

       client.disconnect(); 
       done(); 
      }); 

      client.emit("echo", "Hello World"); 
     }); 
     done(); 
    }); 
}); 

describe("On Connect Things Should Happen", function() { 

    it('initial connection events', function() { 

     should.exist(socket); 
     socket.open();  
     socket.compress(false).emit('an event', { some: 'data' }); 

     socket.on('error', function() { 
      console.log('error'); 
     }); 

     socket.connect(); 
     socket.on('disconnect', function(connection) { 
      console.log('disconnected'); 
      console.log("i'm here"); 
     }); 



     socket.on('connect', function(connection) { 
      console.log('connected'); 
     }); 
    }); 
}); 
+0

テストコードを投稿してください。 –

+0

申し訳ありません私はそれを投稿した –

答えて

0

あなたは、古典的なノードの非同期罠に落ちています。切断イベントが発生する前に時には「ものが起こる」テストが戻ってくることがあります。

"エコーメッセージ"テストと同じ方法でdone関数を処理する必要があります。実際には、次のようになります:

socket.on('disconnect', function(connection) { 
console.log('disconnected'); 
console.log("i'm here"); 
done()}); 

一般的に、どのくらいのテストでこれらの異なるコールバックが処理されるかはわかりません。

関連する問題