2015-10-19 2 views
0

Я пытаюсь сделать простое приложение чата с помощью socket.io. В ручном режиме он работает нормально (через браузер localhost: 3000 /), но я хочу написать модульные тесты для проверки логики сервера. Я не знаю, какие инструменты/библиотеки использовать для тестирования.Как написать тесты: тестирование модуля приложения Socket.io

Вот мой узел код сервера:

index.js
var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

var socketCount = 0; 

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

io.on('connection', function(socket) { 

    socketCount++; 

    console.log('new user connected'); 

    // Let all sockets know how many are connected 
    io.emit('users connected', socketCount); 

    socket.on('disconnect', function(){ 
    // Decrease the socket count on a disconnect, emit 
    socketCount--; 
    io.emit('users connected', socketCount); 
    }); 

    socket.on('chat message', function(msg){ 
    // New message added, broadcast it to all sockets 
    io.emit('chat message', msg); 
    }); 

}); 

А вот мой HTML-страница:

файла: index.html

<html> 
... 
<body> 
    <ul id="messages"></ul> 
    <div class='footer'> 
     <div id="usersConnected"></div> 
     <form action=""> 
     <input id="m" autocomplete="off" /><button>Send</button> 
     </form> 
    </div> 
    </body> 
    ... 
    <script> 
    $(document).ready(function(){ 
     $('#messages').val(''); 
     var socket = io(); 

     $('form').submit(function(){ 
      socket.emit('chat message', $('#m').val()); 
      $('#m').val(''); 
      return false; 
     }); 

     // New message emitted, add it to our list of current messages 
     socket.on('chat message', function(msg){ 
      $('#messages').append($('<li>').text(msg)); 
     }); 

     // New socket connected, display new count on page 
     socket.on('users connected', function(count){ 
      $('#usersConnected').html('Users connected: ' + count); 
     }); 
    }); 
    </script> 
</html> 

Спасибо.

ответ

0

У меня была эта проблема: как сделать модульный тест с помощью «socket.io-client», если вы не знаете, сколько времени сервер предпримет, чтобы ответить ?.

Я решил так, используя мокко и Chai:

var os = require('os'); 
var should = require("chai").should(); 
var socketio_client = require('socket.io-client'); 

var end_point = 'http://' + os.hostname() + ':8081'; 
var opts = {forceNew: true}; 

describe("async test with socket.io", function() { 
this.timeout(10000); 

it('Response should be an object', function (done) { 
    setTimeout(function() { 
     var socket_client = socketio_client(end_point, opts); 

     socket_client.emit('event', 'ABCDEF'); 

     socket_client.on('event response', function (data) { 
      data.should.be.an('object'); 
      socket_client.disconnect(); 
      done(); 
     }); 

     socket_client.on('event response error', function (data) { 
      console.error(data); 
      socket_client.disconnect(); 
      done(); 
      }); 
     }, 4000); 
    }); 
}); 
Смежные вопросы