2013-09-10 6 views
3

Вот код, написанный для веб-сокета с использованием протокола stomp.Тестирование веб-сокетов с помощью Jasmine

function WS(url) { 
    var ws = new SockJS('/notifications'); 

    this.client = Stomp.over(ws), 

    this.client.connect('', '', function() { 
     console.log('Connected'); 
    }, function(error) { 
     console.log('STOMP protocol error: ', error.headers.message); 
    }); 
} 

WS.prototype.disconnect = function() { 
}; 

WS.prototype.subscribe = function() { 
}; 

WS.prototype.unSubscribe = function() { 
}; 

WS.prototype.send = function(msg) { 
}; 

Я нашел этот пост, но это требует фактического подключения к серверу, Unit testing Node.js and WebSockets (Socket.io)

Как мы проверить это с помощью Жасмин. Ищете способ подделать сервер веб-сокета и события пожара (подключиться, отключить и т. Д.). Я буду признателен за любой пример или полезную ссылку.

ответ

8

Просто издевайтесь над всеми вашими зависимостями от вашей функции, поэтому в вашем случае это будет SockJS и Stomp.over.

var wsSpy = jasmine.createSpy(); 
spyOn(window, 'SockJs').andReturn(wsSpy); 

var clientSpy = jasmine.createSpy(); 
spyOne(Stomp, 'over').andReturn(clientSpy) 

После запуска скрипта вы можете проверить на шпионах, что они были вызваны. Для выполнения функции обратного вызова вы можете использовать mostRecentCall.args, чтобы найти их и назвать их в тесте:

var successCallBack = clientSpy.mostRecentCall.args[2]; 
successCallBack(); 

var errorCallBack = clientSpy.mostRecentCall.args[3]; 
errorCallBack(); 
+0

Не похож на работу. Получение этого сообщения «Warning: PhantomJS вышло из строя, возможно, из-за незавершенной спецификации async. Используйте -force для продолжения. ' – RuntimeException

+0

Я не думаю, что PhamtomJS работает с Websockets? –

+0

Отличный, я издеваюсь, может издеваться над WebSocket таким образом, спасибо – Hoto

Смежные вопросы