I'm writing an unit test for the following code, and I would like to reach the full coverage on it.
function Socket(io, nsp) {
if(nsp===undefined || typeof nsp !=='string' || io.nsps===undefined) {
console.log('Error: 921');
return;
}
this._namespace = io.of(nsp);
this._attachedObj=null;
this._onConnectionEvent='';
}
Socket.prototype.sendMessage = function(event, data) {
if(event!==undefined && data!==undefined) {
this._namespace.emit(event, data);
}
};
Socket.prototype.attachObject = function(obj, onConnectionEvent) {
if(obj!==undefined && onConnectionEvent!==undefined) {
this._attachedObj = obj;
this._onConnectionEvent = onConnectionEvent;
var nsp=this._namespace;
var clientHandle = function (socket) {
console.log(' new client connected to ' + nsp);
socket.emit(onConnectionEvent, obj.getConfigJSON());
};
this._namespace.on('connection', clientHandle);
}else{
console.log('Error: 922');
}
};
module.exports = Socket;
At this link http://ift.tt/1KgYKOv you can find covered lines. Only these 2 lines are uncovered
var clientHandle = function (socket) {
console.log(' new client connected to ' + nsp);
socket.emit(onConnectionEvent, obj.getConfigJSON());
};
I have no idea how to cover that block!
This is my test code:
var Socket = require('../../lib/presentationTier/socket.js');
var io = require('socket.io-client');
var assert = require('assert');
describe('Socket', function() {
it('returns null when there are no params', function() {
assert.strictEqual((new Socket()).hasOwnProperty('_namespace'), false);
});
it('returns null when there is a non-valid namespace in params', function() {
assert.strictEqual((new Socket('wrong')).hasOwnProperty('_namespace'), false);
});
function RandomObj() {
this.prop1 = 'prop1';
this.prop2 = 'prop2';
function getConfigJSON(){
return 'prop1-prop2';
}
}
var server = require('socket.io')();
it('set param values to properties', function() {
var socket1 = new Socket(server, '/namespace');
assert.strictEqual(socket1._namespace, server.of('/namespace'));
});
describe('#sendMessage', function() {
var server = require('socket.io')();
server.listen(5000);
var socketURL = 'http://ift.tt/1PHawbG';
var options ={
transports: ['websocket'],
'force new connection': true
};
var client1 = io.connect(socketURL, options);
function Mock() {}
Mock.prototype.getConfigJSON = function() {
return 'configJSON';
};
it('emits a message if given valid params', function() {
var socket1 = new Socket(server, '/namespace');
var object = new Mock();
socket1.attachObject(object, 'onEvent');
socket1.sendMessage('event', 'message');
client1.on('connection', function(configJSON) {
assert.strictEqual(configJSON, object.getConfigJSON());
});
client1.on('event', function(message) {
assert.strictEqual(message, 'message');
});
});
});
describe('#attachObject', function() {
it('does nothing if there are no params', function() {
var socket1 = new Socket(server, '/namespace');
socket1.attachObject();
assert.strictEqual(socket1._attachedObj, null);
assert.strictEqual(socket1._onConnectionEvent, '');
});
var server = require('socket.io')();
server.listen(5000);
var socketURL = 'http://ift.tt/1PHawbG';
var options ={
transports: ['websocket'],
'force new connection': true
};
var client1 = io.connect(socketURL, options);
it('attach the object in params', function() {
var socket1 = new Socket(server, '/namespace');
var obj2 = new RandomObj();
socket1.attachObject(obj2, 'onEvent');
assert.strictEqual(socket1._attachedObj, obj2);
assert.strictEqual(socket1._onConnectionEvent, 'onEvent');
client1.on('connection', function(message) {
assert.strictEqual(message, 'prop1-prop2');
});
});
});
});
Aucun commentaire:
Enregistrer un commentaire