如何使用mock websocket在服务函数中测试onMessage?

时间:2017-09-08 22:01:06

标签: angular unit-testing websocket jasmine karma-jasmine

我有一个服务功能,可以打开websocket,发送和处理响应的onMessage。我正在使用Jasmine尝试为此功能创建单元测试。

我希望能够在Jasmine中调用someService并接收带有假响应消息的promise对象。这样做的最佳方式是什么?

   callbacks = [];
   self.someService= function(){
            // Generate message
            var msg = "someMsg";

            // Create promise
            var deferred = $q.defer();
            callbacks[id] = deferred;

            // Open Socket
            var ws = $websocket("SomeConnectionPoint");

            // Send request
            ws.send(JSON.stringify(msg));

            // Message Return
            ws.onMessage(function(msg){
                var data = JSON.parse(msg.data);

                if (angular.isDefined(callbacks[id])) {
                    var callback = callbacks[id];
                    delete callbacks[id];
                    callback.resolve(msg);
                    ws.close();
                  } else {
                    console.error("Unhandled message", data);
                  }
            });
            return deferred.promise.then(function(response) {
                return response;
            });
        };

1 个答案:

答案 0 :(得分:6)

我建议你先看看angular-websocket测试https://github.com/AngularClass/angular-websocket/blob/master/test/angular-websocket.spec.js他们还使用Jasmine测试他们自己的lib。

然后在lib的文档中阅读有关$ websocketBackend serivce的内容 - https://angularclass.github.io/angular-websocket/您可以使用它为您的代码编写单元测试