2014-03-13 10 views
14

Ich habe eine Fabrik, um eine Get-Anfrage auszuführen, möchte ich testen. Leider sagt mir der Karmatest, dass bei $ httpBackend keine Antwort definiert ist.AngularJS Jasmine testet bekommen-Anfrage

AngularJS 1.2.14, Jasmin 2.0, Karma 0.12.0

mein Modul Hier Ich möchte Test:

var appFactory = angular.module('appFactory', []); 

appFactory.factory('boxListService', function($http){ 
    return{ 
     getList: function(){ 
      return $http.get('/boxlist').then(function(result){ 
       return result.data; 
      }); 
     } 
    }; 
}); 

Mein Test ist dies:

describe('Module-Test', function() { 

    beforeEach(module('appFactory')); 

    it('should call $http.get in getList', inject(function (boxListService, $httpBackend){ 
     $httpBackend.expectGET('/boxlist'); 
     boxListService.getList(); 
     $httpBackend.flush(); 
     })); 
}); 

Nachricht:

Error: No response defined ! 
at $httpBackend (D:/nodeJS/host/test_app/src/public/js/libs/angular/angular-mock.js:1206:13) 

Antwort

25

Sie müssen sowohl die erwartete Antwort als auch die erwartete Anfrage definieren. Es wird folgende Form haben:

$httpBackend.expectGET('/boxlist').respond(HTTP_STATUS_CODE, EXPECTED_RESPONSE); 

HTTP_STATUS_CODE ist eine ganze Zahl. EXPECTED_RESPONSE ist der Wert, der zurückgegeben werden soll (oft ein Object Literal).

Sie können nur eine davon definieren.

Weitere Informationen finden Sie in der Dokumentation ngMock httpBackend.

+4

Ich schaute mir das etwa 5 mal an, bevor ich erkannte, dass die Antwort auch auf dem expectGET deklariert werden muss. Ich hatte den Eindruck, dass der einzige Ort, an dem es notwendig war, die Antwort zu geben. Ist es sicher zu sagen, dass man eine Antwort sowohl auf whenGET als auch auf expectGET geben muss? – binarygiant

1

Nur für den Fall, dass es hilft und weil es mir passiert ist, obwohl es nicht der genaue Fall der Frage ist. Ich hatte diese beiden Zeilen:

$httpBackend.whenGET(myService.serviceURL).respond(myMock); 
$httpBackend.expectGET(myService.serviceURL); 

Mit when ich, was zur Antwort definieren wollte, als den Dienst aufrufen und mit expect wollte ich prüfen, ob die Methode aufgerufen wurde.

Dies funktioniert nicht (obwohl es manchmal, ich weiß nicht warum). Ich denke, irgendwie expect ist when zwingende und deshalb habe ich

Error: No response defined !

Die Lösung der when Klausel zu entfernen war, und fügen Sie respond() zu expect

$httpBackend.expectGET(myService.serviceURL).respond(myMock); 

Ich weiß nicht, warum der Rahmen auf diese Weise verhält. Wenn jemand weiß, wäre es nett, dass Sie es hier erklären, um die Antwort zu verbessern