Jasmine - 如何监视和测试 AngularJS 异步服务
Jasmine - How to Spy and test an AngularJS asynchronus Service
我正在尝试监视异步服务调用,但到目前为止还没有成功。尽管同步调用能够模拟。
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);
我怎样才能return一个结果
{'name':"Name"}到异步调用getResource
由于服务应该 return 一个承诺,return 值应该用一个承诺来模拟:
spyOn(commonService, 'hasData').and.returnValue($q.resolve({'name': "Name"} ));
上面的代码使用了延迟反模式。应该改为:
function getResource(resourceURL) {
var url = resourceURL + ".json";
return $http.get(url);
}
我正在尝试监视异步服务调用,但到目前为止还没有成功。尽管同步调用能够模拟。
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);
我怎样才能return一个结果
{'name':"Name"}到异步调用getResource
由于服务应该 return 一个承诺,return 值应该用一个承诺来模拟:
spyOn(commonService, 'hasData').and.returnValue($q.resolve({'name': "Name"} ));
上面的代码使用了延迟反模式。应该改为:
function getResource(resourceURL) {
var url = resourceURL + ".json";
return $http.get(url);
}