5

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

適用呼び出しを削除すると、タイムアウトになります。

4

1 に答える 1

2

ほとんどの場合、実際のデータを含むサービスが利用可能なポートとは異なるポートでカルマを実行しています。CORSに遭遇しないように、実際のデータを含むサービスが実行されているサーバー/ポートにリクエストを再ルーティングできれば、それを機能させることができます。私のプロジェクトでは、Charles プロキシを使用して URLをマップし、使用時に CORS を回避しpassThrough()ます。また、実際のデータ サービスを CORS 互換にすることで、作業を容易にすることもできます。

于 2013-11-09T19:04:32.607 に答える