无法从控制器延迟语句中获取karma函数中的数据

时间:2015-05-22 06:34:01

标签: angularjs karma-jasmine angular-services

            /*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);

      }));
  

我没有在业力考试中获得购物车项目。   控制器调用服务以获取异步数据。这个过程是   由角度承诺处理。但是编写测试用例的问题>因为控制器功能在从>获取数据之前返回服务。   我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

替换

scope.getCheckoutItems();
console.log(scope.cart);

通过

scope.getCheckoutItems();
scope.$apply();
console.log(scope.cart);

当范围为$ applied时,将调用Promise回调。