Как да извикате $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().

Вижте plunker: http://plnkr.co/edit/eLPOZTCgkSfoACLJsVZo?p=preview

OR

Можете да замените expectGET с whenGET, което не се проваля на теста, ако ресурсът не е извикан. НО тъй като очаквате expect($scope.data[0].name).toEqual('naveen') където 'naveen' идва от http respose, тази промяна трябва да е наред.

person Chanthu    schedule 02.01.2016
comment
P.S. Тази публикация свързана ли е? stackoverflow.com/ въпроси/34562051/ - person Chanthu; 02.01.2016