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

Ins*_*nct 1 unit-testing websocket jasmine karma-jasmine angular

我有一个服务函数,它打开一个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;
            });
        };
Run Code Online (Sandbox Code Playgroud)

Ale*_*nko 6

我建议你先看一下angular-websocket测试https://github.com/AngularClass/angular-websocket/blob/master/test/angular-websocket.spec.js他们也用Jasmine来测试他们自己库.

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