模拟Angularjs套接字并在茉莉花中测试

时间:2016-05-12 19:29:17

标签: angularjs sockets unit-testing websocket jasmine

我在service工作angularjs websocket。我想使用onOpen onClose onMessage and send测试socket的基本jasmine事件。以下是service

中套接字的定义方式
angular.module('srvSocket', [])
  .service('Socket', function($websocket, localConfig) {

var ws = $websocket('ws://'+localConfig.apiUrl);

ws.onMessage(onMessage);
ws.onError(onError);
ws.onClose(onClose);

ws.onOpen(function () {
      console.log('conn opened');
    });

function onMessage(data){
  console.log('data received');
  ws.send(JSON.stringify({test: 'hi'}));
}

 function onError(err) {
          console.log(err);
        };

 function onClose() {
          console.log('conn closed');
        };
  });

以下是我在测试中使用(尝试)服务的方式:

describe('Service: Socket', function () {

  var socket, $websocket, $websocketBackend, lc;

  beforeEach(angular.mock.module('ngWebSocket', 'ngWebSocketMock'));
  beforeEach(inject(function(_Socket_, _$websocketBackend_, _$websocket_, localConfig){
    socket = _Socket_;
    lc = localConfig;
    $websocket = _$websocket_;
    $mockSocketBackend = _$websocketBackend_;
    $mockSocketBackend.mock();
  }));

 it('should connect to socket api', function(){
     var url = 'ws://'+config.apiUrl;
     $mockSocketBackend.expectConnect(url);
     ws = $websocket(url);
     expect($mockSocketBackend.isConnected(url)).to.be.above(0);
  });
});

这是我跟随documentation here的距离。我基本上寻找的是如何为服务设置模拟websocket服务器?那会让我测试我的所有期望吗?

2 个答案:

答案 0 :(得分:2)

我会嘲笑整个$websocket,如此plunk所示,这样您就可以完全控制自己想要测试的内容。

答案 1 :(得分:1)

您可以使用this solution中的sockMock here

我希望这会有所帮助