2016-10-10 5 views
0

Я получаю действительно противоречивое поведение в моем терминале, когда console.logging внутри теста, который я написал, используя mocha. Мы запускаем сервер node.js и запускаем socket.io. Не приводит ли console.log к терминалу только некоторое время по какой-то причине? Я действительно смущен этим поведением.Тестирование с помощью Mocha в Node.js

➜ 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) 

Разница между этими двумя временами я запускал тест мокко являются console.log утверждения, что появляется в первом тестовом прогоне (отключен, я здесь). Они не появляются во втором тесте, который я запускал.

Edit: размещение моего тестового кода в ответ на комментарий (спасибо!)

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

Вы падаете в классический узле асинхронной ловушки. Ваш тест «должно случиться» иногда возвращается, прежде чем произойдет событие разъединения, а иногда и нет.

Вам необходимо обработать выполненную функцию так же, как и в тесте «echo messages». Пунктуально, он хотел бы это:

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

В общем, я не знаю, сколько, что тест делает обработку всех эти различные функций обратного вызова.

Смежные вопросы