2013-11-03 35 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