【问题标题】:How to write tests: Socket.io app unit testing如何编写测试:Socket.io 应用单元测试
【发布时间】:2015-10-19 14:19:12
【问题描述】:

我正在尝试使用 socket.io 制作简单的聊天应用程序。手动它工作正常(通过浏览器 localhost:3000/)但我想编写单元测试来验证服务器的逻辑。我不知道使用哪些工具/库进行测试。

这是我的节点服务器代码:

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>

谢谢。

【问题讨论】:

    标签: node.js unit-testing testing express socket.io


    【解决方案1】:

    我遇到了这个问题:如果您不知道服务器需要多长时间响应,如何使用“socket.io-client”进行单元测试?

    我已经用 mochachai 解决了:

    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);
        });
    });
    

    【讨论】:

    • 谢谢。终于找到了一个实际工作的socketIO的单元测试示例。
    猜你喜欢
    • 2012-02-03
    • 2019-01-28
    • 2021-10-17
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多