2016-02-02 2 views
0

У меня есть тест, который проверяет, правильно ли излучается событие joined, когда пользователи подписываются на номер. Тем не менее, я хочу написать тест, чтобы убедиться, когда chatUser2 присоединяется room2, что joined событие только получил от нее и не client1 в room1Испытание для проверки вещания номера

Как бы я написать тест, чтобы убедиться, что client1.on('joined') не вызывается, когда client2 соединяется?

var should = require('should'), 
io = require('socket.io-client'), 
path = require('path'), 
express = require(path.resolve('./config/lib/express')), 
mongoose = require('mongoose'), 
sinon = require('sinon'), 
app, agent, credentials, user, sale; 

var chatUser1 = {'name':'Tom', 'room':'room1'}; 
var chatUser2 = {'name':'Sally', 'room':'room2'}; 


describe("Socket Server",function(){ 
    it('Should not broadcast joined event to unsubscribed rooms', function(done){ 

     var client1 = io.connect(socketURL, options); 
     client1.on('connect', function(data){ 
      client1.emit('subscribe', chatUser1); 

       client1.on('joined', function(data){ 
       data.should.equal(chatUser1.name + " has joined "+chatUser1.room); 

       }); 

      var client2 = io.connect(socketURL, options); 

      client2.on('connect', function(data){ 
       client2.emit('subscribe', chatUser2); 
      }); 

      client2.on('joined', function(data){ 

       data.should.equal(chatUser2.name + " has joined "+chatUser2.room); 
       client1.disconnect(); 
       client2.disconnect(); 
       done(); 
      }); 


     }); 

    }); 
}); 

ответ

0

Одно из решений я нашел here # 3

Это на самом деле не шпионит на что-либо, он просто использует переменную для подсчета количества раз конкретное событие называется. В этом случае его нужно вызывать только один раз.

test.js

var should = require('should'); 
var io = require('socket.io-client'); 

var socketURL = 'http://0.0.0.0:5000'; 

var options ={ 
    transports: ['websocket'], 
    'force new connection': true 
}; 

var chatUser1 = {'name':'Tom'}; 
var chatUser2 = {'name':'Sally'}; 
var chatUser3 = {'name':'Dana'}; 

describe("Chat Server",function(){ 

it('Should be able to send private messages', function(done){ 
    var client1, client2, client3; 
    var message = {to: chatUser1.name, txt:'Private Hello World'}; 
    var messages = 0; 

    var completeTest = function(){ 
    messages.should.equal(1); 
    client1.disconnect(); 
    client2.disconnect(); 
    client3.disconnect(); 
    done(); 
    }; 

    var checkPrivateMessage = function(client){ 
    client.on('private message', function(msg){ 
     message.txt.should.equal(msg.txt); 
     msg.from.should.equal(chatUser3.name); 
     messages++; 
     if(client === client1){ 
     /* The first client has received the message 
     we give some time to ensure that the others 
     will not receive the same message. */ 
     setTimeout(completeTest, 40); 
     }; 
    }); 
    }; 

    client1 = io.connect(socketURL, options); 
    checkPrivateMessage(client1); 

    client1.on('connect', function(data){ 
    client1.emit('connection name', chatUser1); 
    client2 = io.connect(socketURL, options); 
    checkPrivateMessage(client2); 

    client2.on('connect', function(data){ 
     client2.emit('connection name', chatUser2); 
     client3 = io.connect(socketURL, options); 
     checkPrivateMessage(client3); 

     client3.on('connect', function(data){ 
     client3.emit('connection name', chatUser3); 
     client3.emit('private message', message) 
     }); 
    }); 
    }); 
}); 

}); 

app.js

var io = require('socket.io').listen(5000); 
var clients = {}; 

io.sockets.on('connection', function (socket) { 
    var userName; 
    socket.on('connection name',function(user){ 
    userName = user.name; 
    clients[user.name] = socket; 
    io.sockets.emit('new user', user.name + " has joined."); 
    }); 

    socket.on('message', function(msg){ 
    io.sockets.emit('message', msg); 
    }); 

    socket.on('private message', function(msg){ 
    fromMsg = {from:userName, txt:msg.txt} 
    clients[msg.to].emit('private message', fromMsg); 
    }); 

    socket.on('disconnect', function(){ 
    delete clients[userName]; 
    }); 
}); 
Смежные вопросы