0
我想单元测试依赖于异步API调用(承诺)的Angular控制器中的函数。如何在Jasmine中测试服务相关函数?
我在一个调用服务,并且基于所述服务的结果在控制器中的$范围变量的控制装置的功能:
$scope.display = 'loading';
$scope.loadData = function() {
ApiService.getSummary().then(
function (response) {
$scope.displayData(response.data);
$scope.display = 'boxes';
},
function (error) {
$scope.display = 'error';
}
);
};
我有以下茉莉单元测试
var FunctionFixtures = {
successFunc: function() {
var deferred = $q.defer();
var response = {
'data': dataVar
};
deferred.resolve(response);
return deferred.promise;
},
errorFunc: function() {
var deferred = $q.defer();
deferred.reject();
return deferred.promise;
}
};
it('should show the boxes on data load success', function(){
spyOn(ApiService, 'getSummary').and.callFake(FunctionFixtures.successFunc);
$scope.loadData();
expect($scope.display).toBe('boxes');
});
当我运行测试,我得到以下错误:
Error: Expected 'loading' to be 'boxes'.
我埃森一定要伪造api调用并返回成功或失败,并确保$ scope.display被设置为适当的字符串,即'boxes'用于成功和'错误'失败。有关如何做到这一点的任何想法?
你在测试中是否缺少'$ scope.loadData()'!? – friedi 2014-10-10 18:33:08
不,对不起@friedi,我只是在测试中将$ scope.loadData()称为一行。我简化了代码,使其更通用。 – 2014-10-10 18:59:50