2013-11-04 6 views
18

Ich habe eine Funktion in meinem Bereich, um den Status meines Dienstes abzurufen, wenn der Benutzer auf eine Schaltfläche klickt, oder wenn ein Ereignis ausgelöst wird und diese Funktion automatisch aufgerufen wird.

Dies ist meine Funktion, definiert in der Steuerung verwende ich:

$scope.getStatus = function() { 
    $http({method: 'GET', url: config.entrypoint + config.api + '/outbound/service/' + $scope.serviceId}) 
    .success(function(data) { 
     $scope.errorMessage = ''; 
     $scope.serviceAllGood = data; 
    }) 
    .error(function() { 
     $scope.serviceAllGood = ''; 
     $scope.errorMessage = 'We are experiencing problems retrieving your service status.'; 
    }); 
    } 

Die Unit-Test wie gemacht wird:

describe('SendServiceCtrl', function(){ 
    var scope, ctrl, $httpBackend, configuration; 

    beforeEach(function() { 
     module('papi', 'ngUpload'); 
    }); 

    beforeEach(inject(function(_$httpBackend_, $rootScope, $controller, config) { 
     configuration = config; 
     $httpBackend = _$httpBackend_; 
     $httpBackend.expectGET(configuration.entrypoint + configuration.api + "/user/outboundstatus/").respond(200, {"meta":{"apiVersion":"0.1","code":200,"errors":null},"response":{"allowed":false}}); 
     scope = $rootScope.$new(); 
     ctrl = $controller('SendServiceCtrl', {$scope: scope}); 
    })); 

    it('Should get the status', function() { 

    scope.serviceId = '09bb5943fa2881e1'; 
    scope.getStatus(); 
    $httpBackend.whenGET(configuration.entrypoint + configuration.api + '/outbound/service/' + scope.serviceId).respond(200, {"meta":{"apiVersion":"0.1","code":200,"errors":null}}); 

    }); 

}); 

Im Unit-Test Ich habe auch andere httpBackend Tests $ auf der gleiche Controller, aber alle funktionieren einfach. Was mache ich falsch?

Antwort

12

Sie müssen die whenGETvor liefern Sie die Methode aufrufen.

it('Should get the status', function() { 
    scope.serviceId = '09bb5943fa2881e1'; 
    $httpBackend.whenGET(configuration.entrypoint + configuration.api + '/outbound/service/' + scope.serviceId).respond(200, {"meta":{"apiVersion":"0.1","code":200,"errors":null}}); 
    scope.getStatus(); 
}); 

Richten Sie die Erwartung der Anfrage ein und lösen Sie die Anfrage aus.

Hoffe, das hilft.

+0

Vorlagen verursachen dann auch diesen Fehler. – FlavorScape

+0

Glauben Sie, dass die Verwendung von '$ templateCache' wie' ui.bootstrap' die Notwendigkeit des Spottes des GETs zunichte machen würde? – domokun

+0

@domokun Können Sie einen Link dorthin veröffentlichen, wo dieser verwendet wird? –