【问题标题】:Testing Web Sockets with Jasmine使用 Jasmine 测试 Web 套接字
【发布时间】:2013-09-13 22:35:19
【问题描述】:

这是一些使用 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 进行测试。 寻找一种方法来伪造 web-socket 服务器和触发事件(连接、断开等)。我将不胜感激任何示例或有用的链接。

【问题讨论】:

    标签: javascript unit-testing websocket jasmine stomp


    【解决方案1】:

    只需模拟函数的所有依赖项,因此在您的情况下,这将是 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 继续。'
    • 太好了,我mock可以这样mock WebSocket,谢谢
    【解决方案2】:

    只是对 Andreas 接受的答案的更新。根据http://jasmine.github.io/2.3/introduction.html#section-31

    ,Jasmine 的语法有所变化

    按照 Jasmine 2.3 的新语法是:

    clientSpy.calls.mostRecent().args
    

    【讨论】:

      猜你喜欢
      • 2013-03-30
      • 2013-05-29
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多