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