我有一个服务功能,可以打开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;
});
};
答案 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/您可以使用它为您的代码编写单元测试