2013-11-03 9 views
5

passThrough()を使用して私の単体テストに実際の$ httpデータを使用したいと思います。実際のXHRデータ/ passThrough()でAngularJS/Karmaユニットテスト

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()を使用したときにCORSを回避するためにCharles proxymap urlsを使用します。 実際のデータサービスCORSと互換性を持たせることもできます。

+0

ありがとうございます。通常、私は受け入れる前にこれを試すのを待っています(または私の場合は、賞金を授与します)が、あなたの答えはまさに正しいようです。私はそれを考えなかったとは信じられません。また、私はチャールズの代理人の名前は聞いたことがないが聞いたことがない。 – forivall

関連する問題