Как вызвать запрос $http

Я пытаюсь сделать демонстрацию запроса $http и также протестировать эту службу. Мне это нравится

.controller('cntrl',function($scope,appfactory,$http){

  $scope.data=[];
  appfactory.setValue('test abc');

  $scope.getData=function(){
    $http.get('data.json').success(function(data){
      console.log(JSON.stringify(data))
      $scope.data=data;
    }).error(function(data){
        console.log(JSON.stringify(data))
    })
  }
  $scope.getData();
  $scope.toggle=function(){
      if(appfactory.mode()=='a'){
    $scope.message='naveen'
  }else {
     if(appfactory.mode()=='b'){
       $scope.message='parveen'
  }
  }
  }

})

Я загружаю эти данные из файла json и отображаю их для просмотра. Но когда я пытаюсь протестировать это приложение, у меня возникает ошибка, почему? как убрать эту ошибку

beforeEach(inject(function($rootScope,$controller,appfactory,_$httpBackend_) {
    $scope = $rootScope.$new();  
    $httpBackend=_$httpBackend_;

      createController = function() {
       return $controller('cntrl', {'$scope' : $scope });
     };

}));



   it("tracks that the spy was called", function() {
    var response=[{"name":"naveen"},{"name":"parveen"}]
    $httpBackend.expectGET('data.json').respond(response);
         var controller = createController();

     $scope.getData();
     $httpBackend.flush();

     expect($scope.data[0].name).toEqual('naveen')
  });


})

вот мой код http://plnkr.co/edit/zdfYdtWbnQz22nEbl6V8?p=preview


person user5711656    schedule 02.01.2016    source источник
comment
@claies моя проблема в другом..!!   -  person user5711656    schedule 02.01.2016
comment
как это отличается? вы никогда не указываете whenGET в этом коде.   -  person Claies    schedule 02.01.2016
comment
ох понял .. !! решить мою проблему   -  person user5711656    schedule 02.01.2016


Ответы (1)


HTTP-вызов для получения данных фактически вызывается дважды в тесте. Во-первых, когда контроллер инициализируется (потому что вы вызываете $scope.getData()), а во-вторых, когда вы вручную вызываете $scope.getData() в спецификации.

И ваше ожидание высмеивается только один раз (перед инициализацией контроллера). Чтобы исправить тест (чтобы имитировать то, что контроллер фактически делает), ожидание должно быть установлено еще раз перед вызовом $scope.getData().

См. плункер: http://plnkr.co/edit/eLPOZTCgkSfoACLJsVZo?p=preview

OR

Вы можете заменить expectGET на whenGET, который не провалит тест, если ресурс не вызывается. НО, поскольку вы ожидаете expect($scope.data[0].name).toEqual('naveen'), где «naveen» происходит от ответа http, это изменение должно быть в порядке.

person Chanthu    schedule 02.01.2016
comment
P.S. Этот пост связан? stackoverflow.com/ вопросы/34562051/ - person Chanthu; 02.01.2016