使用Jasmine测试Web Sockets

3

这里有一些使用STOMP协议编写的Web Socket代码。

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)

我们如何使用Jasmine测试这个问题呢? 寻找一种伪造WebSocket服务器并触发事件(连接、断开等)的方法。 我会非常感激任何示例或有用链接。

2个回答

9

只需模拟您函数的所有依赖项,因此在您的情况下,这将是SockJSStomp.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();

似乎不起作用。收到此消息:“警告:PhantomJS超时,可能是由于未完成的异步规范。使用--force继续。” - RuntimeException
太棒了,我可以用这种方式模拟WebSocket,谢谢。 - Andrzej Rehmann

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接