2013-11-03 11 views
5

Ich möchte echte $ http-Daten für meine Unit-Test mit passThrough() verwenden.AngularJS/Karma-Unit-Test mit echten XHR-Daten/passThrough()

Hier ist, was ich bisher:

var should = chai.should(); 
beforeEach(module('myApp', 'ngMockE2E')); 
beforeEach(inject(function(_$httpBackend_, _$rootScope_, _$http_) { 
    $scope = _$rootScope_; 
    $http = _$http_; 
    $httpBackend = _$httpBackend_; 
})); 

it.only('blah', function(done) { 
$httpBackend.whenGET('/api/data').passThrough(); 

    $scope.$apply(function() { 
    $http.get('/api/data').success(function(data) { 
    data.should.eql({"foo": "bar"}); 
    done(); 
    }); 
}); 

// Evidently not required with E2E 
//$httpBackend.flush(); 

}); 

Aber das gibt einen Fehler:

Unexpected request: GET /api/data 
No more request expected 
Error: Unexpected request: GET /api/data 
No more request expected 

Wenn ich die Anwendung nenne es mal aus zu entfernen.

Antwort

2

Am wahrscheinlichsten würden Sie Karma auf einem anderen Port als dem Port ausführen, wo die Dienste mit echten Daten verfügbar sind. Wenn Sie Ihre Anforderungen an den Server/Port umleiten könnten, auf dem die Dienste mit echten Daten ausgeführt werden, sodass sie nicht auf CORS stoßen, können Sie das Problem beheben. In meinem Projekt verwende ich Charles proxy bis map urls, um CORS zu umgehen, wenn Sie passThrough() verwenden. Sie können auch Ihre CORS-kompatiblen Datendienste kompatibel machen, um die Dinge zu erleichtern.

+0

Danke, Mann. Normalerweise würde ich warten, um das zu testen, bevor ich akzeptiere (oder in meinem Fall, das Kopfgeld zuerkannt), aber Ihre Antwort scheint, dass es genau richtig ist. Ich kann nicht glauben, dass ich nicht daran gedacht habe. Auch habe ich noch nicht gehört (obwohl der Name klingt vertraut) Charles Proxy. – forivall

Verwandte Themen