加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 17:14:41 所属栏目:安全 来源:网络整理
导读:/*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(
/*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);

      }));

I am not getting cart items in karma test.
controller calls service for getting data in async. this process is
handled by angular promise.but problem with writing test case > because controller function returns before getting data from > service.
how can I solve this problem?

解决方法

更换

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

通过

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

当范围为$apply时,将调用Promise回调.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读