/*This is my cart service function:*/
getCheckoutItems: function() {
var defer = $q.defer();
var response = {
result: true,
data: '',
err: ''
};
if (!angular.isUndefined(productListSample)) {
response.data = productListSample;
defer.resolve(response);
} else {
response.result = false;
response.err = 'error';
defer.reject(response);
}
return defer.promise;
}
/*This is my controller function:*/
$scope.cart = {
items: [],
phoneNo: ''
};
$scope.getCheckoutItems = function() {
CartService.getCheckoutItems().then(function(result) {
$scope.cart.items = result.data;
}, function(err) {
/*
* Todo: handle when service fails to retrieve data.
*/
});
};
/* This is karma test function */
it('get checkout items', inject(function($controller) {
$controller('Ctrl', {
$scope: scope
});
scope.getCheckoutItems();
console.log(scope.cart);
}));
我没有在业力考试中获得购物车项目。 控制器调用服务以获取异步数据。这个过程是 由角度承诺处理。但是编写测试用例的问题>因为控制器功能在从>获取数据之前返回服务。 我该如何解决这个问题?
答案 0 :(得分:3)
替换
scope.getCheckoutItems();
console.log(scope.cart);
通过
scope.getCheckoutItems();
scope.$apply();
console.log(scope.cart);
当范围为$ applied时,将调用Promise回调。