2013-11-03 34 views
5

我想使用真正的$ http數據爲我的單元測試使用passThrough()。AngularJS/Karma單元測試與真正的XHR數據/ passThrough()

這是我到目前爲止有:

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(); 

}); 

但是,這給出了一個錯誤:

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

如果我刪除應用調用超時。

回答

2

很可能你會在不同的端口上運行業務,而不是具有實際數據的服務可用的端口。如果您可以將您的請求重新路由到具有真實數據的服務所在的服務器/端口,使其不會遇到CORS,您將能夠使其工作。在我的項目中,當使用passThrough()時,我使用Charles proxymap urls來繞過CORS。 你也可以使你的真正的數據服務CORS兼容,以緩解事情。

+0

謝謝,夥計。通常情況下,我會在接受(或者在我的情況下,獎勵賞金)之前等待測試,但是您的回答看起來完全正確。我不敢相信我沒有想到這一點。另外,我還沒有聽說過(儘管這個名字聽起來很熟悉)查爾斯代理。 – forivall