2016-03-26 9 views
0

Denetleyici testi sırasında 'a bakıyorum Hata: Beklenmeyen istek: GET/api/initData, Beklenen GET/api/empData .Şimdi, denetleyicimde iki tane http araması var. Aşağıdaki konular var.Beklenmedik istek: Açısal yasemin testine tabi tut

1) verdikten sonra $ httpBackend.expectGET hem test durumları aksi geçiyoruz ben error.Here Yukarıdaki ben yılında bir http çağrısı

2) afterEach için blok tekrar test etmek istiyorum alıyorum için $ httpBackend.expectGET yapmak zorundayım, aksi halde atıyor. Aşağıda

bu denetleyici için benim kod parçacığı olduğunu

Aşağıda
describe('Manager Controller',function(){ 

    var $scope, 
     $rootScope, 
     $injector, 
     $controller, 
     $httpBackend, 
     mockManagerData, 
     managerController; 

    beforeEach(module('APP')); 

    beforeEach(inject(function(_$rootScope_,_$injector_,_$controller_,_$httpBackend_){ 
     $rootScope = _$rootScope_; 
     $injector = _$injector_; 
     $controller = _$controller_; 
     $scope = $rootScope.$new(); 
     $httpBackend = _$httpBackend_; 
     mockManagerData = { 
      "manager": [ 
      { 
       "id": 1, 
       "name": "Sam", 
       "department": "IT", 
       "employee": [ 
       { 
        "id": 1, 
        "name": "Mak", 
        "profile": "developer" 
       }, 
       { 
        "id": 1, 
        "name": "John", 
        "profile": "QA" 
       }, 
       { 
        "id": 1, 
        "name": "Tom", 
        "profile": "Dba" 
       } 
       ] 
      } 
      ] 
     } 
     managerController = $controller('managerCtrl',{ 
      $scope:$scope 
     }); 
    })); 

    it('should get manager details',function(){ 
     $httpBackend.expectGET('/api/initData').respond(200,''); 
     $httpBackend.expectGET('/api/empData').respond(200,mockManagerData); 
     $scope.getManagerDetails();//click event in controller 
     $httpBackend.flush(); 
     expect(true).toBe(true); 
    }); 

    afterEach(function() { 
     $httpBackend.expectGET('/api/initData').respond(200,''); 
     $httpBackend.expectGET('/api/empData').respond(200,mockManagerData); 
     $httpBackend.verifyNoOutstandingExpectation(); 
     $httpBackend.verifyNoOutstandingRequest(); 
    }); 

}) 

Yukarıdaki kod iyi çalışıyor

(function(angular){ 
    'use strict' 
    angular.module('APP').controller('managerCtrl',managerController); 
    managerController.$inject=['$scope','$http']; 
    function managerController($scope,$http){ 

     $scope.getManagerDetails = function(){ 
      $http({ 
       method: 'GET', 
       url: '/api/empData' 
      }).then(function successCallback(response) { 
        //some login   
       }, function errorCallback(response) { 

      }); 

     } 
     $http({ 
      method: 'GET', 
      url: '/api/initData' 
     }).then(function successCallback(response) { 
       //some logic   
      }, function errorCallback(response) { 

     }); 
    } 
})(window.angular) 

benim denetleyicisi mantık ama http çağrının herhangi kaldırdığınızda alıyorum yukarıda belirtilen erros. Lütfen bir tane yardım edin.Teşekkürler

+0

İstekte yapıyor kontrolör mantığı eklemek gerekebilir. İlk olarak, daha esnek olduğu için bazı 'whenGet' ekleyebilir ve ardından 'waitGet' kullanarak ünite testlerinizi temizleyebilirsiniz. – austin665

+0

Denetleyici mantığımı güncelleştirdim – Nitya

cevap

0

Sadece api/initData ya da her iki talep için de test edebilirsiniz.Kontrolörünüzde ikinci arama, clickhandler'ı aradığınız ya da etmediğiniz sürece her zaman yapılacaktır. BeforeEet işlevini BeforeEach işlevine taşıyabilir ve whenGet'e dönüştürebilirsiniz. Daha sonra, ilk testinizde sadece test fonksiyonunu test edebilirsiniz. bakın whenGet ve expectGet arasındaki httpBackend üzerinde dokümantasyon ve fark için

this.

+0

AfterEach bloğunda neden $ httpBackend'i tekrar kullanmam gerekiyor? Kullanmadan hata alıyorum – Nitya

+0

'$ httpBackend.expectGET ('/ api/init.json'). ('', 200) yanıt vermek; $ httpBackend.expectGET ('/ api/emp.json'). (200, mockManagerData); '/ api/initData ve/api/emitData'ya iki $ http araması yapıyorsunuz. Kontrol cihazınızın neden /api/init.json ve /api/emp.json çağrılarını yaptığından emin değilsiniz. – austin665

+0

özür dilerim şu/api/empData ve/api/initData – Nitya