对于以下服务工厂,我想检查是否调用了foo()。并且还想验证foo()函数的返回值。有谁会告诉我如何使用spyOn使用Jasmine来做到这一点?我是Jasmine框架的新手。
angular.module('myapp').
factory('messageservice', ['$http', '$q', function ($http, $q) {
function foo(query) {
return 'foo';
}
function getServerMessages(query) {
var query=foo();
return $http.get(query))
.then(function (result) {
console.log('success');
}, function (err) {
debugger;
console.log('error');
});
}
return {
getMessages: getFolderMessages,
getMessageDetails: getServerMessages
};
}]);
谢谢,
克里希纳
答案 0 :(得分:2)
你不能直接这样做,但你可以通过监视$ http并查看作为参数传递的内容来间接地做到这一点。如果你得到了正确的参数,你也知道foo()被调用了,否则它就没有正确的值。
spyOn($http, 'get').andReturn(aPromiseYouShouldResolveAtSomePointInYourTest);
expect($http.get).toHaveBeenCalled();
var queryItWasCalledWith = $http.get.mostRecentCall.args;
// do some assertions on queryItWasCalledWith