我正在尝试监视异步服务调用,但到目前为止还没有成功。虽然同步调用能够模拟。
commonService.getResource(ResourceConst).then(function (result) {
$scope.resource = result.data;
}, function (error) {
loggerService.log(error);
});
实际获取资源功能
function getResource(resourceURL) {
var deferred = $q.defer();
var url = resourceURL + ".json";
$http.get(url).then(function (data) {
deferred.resolve(data);
},
function (error) {
deferred.reject(error);
});
return deferred.promise;
}
即使我能够在同一服务中监视同步方法,如下所示,我也无法对此函数调用执行相同的操作。
spyOn(commonService, 'hasData').and.callFake(function(args) {
return true;
});
上面的代码成功完全模拟了同步调用,
$scope.hasData = commonService.hasData($scope.resource.Data);
如何返回结果
{' name':" Name"} 到异步调用getResource
答案 0 :(得分:1)
由于服务应该返回一个promise,因此返回值应该使用promise进行模拟:
spyOn(commonService, 'hasData').and.returnValue($q.resolve({'name': "Name"} ));
上面的代码使用延迟反模式。它应该是:
function getResource(resourceURL) {
var url = resourceURL + ".json";
return $http.get(url);
}