Created
January 24, 2011 22:46
-
-
Save x1024/794143 to your computer and use it in GitHub Desktop.
NodeJS Socket.IO logic test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var http = require('http'), | |
should = require('should'), | |
io = require('socket.io'), | |
decode = require('.npm/socket.io/0.6.8/package/lib/socket.io/utils').decode, | |
encode = require('.npm/socket.io/0.6.8/package/lib/socket.io/utils').encode, | |
WebSocket = require('.npm/socket.io/0.6.8/package/support/node-websocket-client/lib/websocket.js').WebSocket; | |
exports['Socket.IO mocking'] = function(assert){ | |
var _server = require('http').createServer(function(){}); | |
// A mock client object. | |
var _client; | |
// Used as an easy way to know when to shut the server down. | |
var messages_to_receive = 4; | |
var port = 5000 // Any number will do | |
_server.listen(port, function(){ | |
// When this function is called, the server will be started. | |
// We can now write some mocked-out client code to connect to it. | |
// This is the equivalent to "new io.Socket(...)" in the browser | |
// What we send here will be received in the server as if it were sent from a browser | |
_client = new WebSocket('ws://localhost:' + port + '/socket.io/websocket', 'borf'); | |
_client.messages = []; | |
// The encode/decode parts are not obvious - do not forget them :) :) | |
_client.onmessage = function(ev) { | |
// These are the messages received at the "client" | |
this.messages.push(decode(ev.data)[0]) | |
if (--messages_to_receive == 0) | |
close(); | |
}; | |
// This part is optional | |
_client.onopen = function(){ | |
_client.send(encode('Test Message')); | |
}; | |
}); | |
// Init the server-side socket as we always do. | |
// This is the same kind of code as in the chat tutorial. | |
// In here you can put your actual Socket.IO handler on the server | |
// (which we will be testing). | |
var _socket = io.listen(_server); | |
_socket.on('connection', function(conn){ | |
conn.on('message', function(msg){ | |
msg.should.equal('Test Message'); | |
if (--messages_to_receive == 0) | |
close(); | |
// This part is optional | |
conn.send('From server'); | |
}) | |
// This part is optional | |
_socket.broadcast("Broadcast message"); | |
}); | |
var close = function() { | |
_client.messages.length.should.equal(3); | |
// _client.messages[0] is always the sessionId of the client. | |
_client.messages[1].should.equal("Broadcast message"); | |
_client.messages[2].should.equal("From server"); | |
_client.close(); | |
_server.close(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment