使用真实XHR数据/ passThrough()进行AngularJS / Karma单元测试

时间:2013-11-03 04:48:10

标签: javascript unit-testing angularjs karma-runner

我想使用passThrough()为我的单元测试使用真正的$ http数据。

这是我到目前为止所拥有的:

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

如果我删除了申请,则超时。

1 个答案:

答案 0 :(得分:2)

最有可能的是,您将在与具有真实数据的服务可用的端口不同的端口上运行业力。如果您可以将请求重新路由到运行真实数据的服务的服务器/端口,以便它不会遇到CORS,那么您将能够使其正常工作。在我的项目中,我使用Charles proxymap urls来使用passThrough()时绕过CORS。 您还可以使您的真实数据服务CORS兼容,以便轻松完成任务。