7

$http GET リクエストを実行し、レスポンスをローカルにキャッシュする AngularJS サービスがあります。最終呼び出しからのデータのみがキャッシュされるように、同時に発生する複数の呼び出しを処理するように設計されています。

具体的には、次の場合です。

  • リクエストA開始
  • リクエストB開始
  • リクエストB完了
  • リクエスト A 完了

その結果、要求 B の応答は最後に開始されたため、キャッシュされます。

ただし、ジャスミンでこれを単体テストするのに問題があります。

2 つの $httpBackend.expectGET() 期待値を設定できますが、要求された順序でしかフラッシュできません。

基本的に、次のようなことができる必要があります。

$httpBackend.expectGET('/one').respond(200, data1);
$httpBackend.expectGET('/two').respond(200, data2);

myService.doSomething('/one');
myService.doSomething('/two');

$httpBackend.flush('/two');
$httpBackend.flush('/one');

expect(myService.data).toBe(data2);

誰かがこれを達成するためのきちんとした方法を提案できますか?

4

1 に答える 1

2

HTTP呼び出しを単純なスタブに抽出することで、これを解決しました。これにより、サービスから $http を削除し、単体テストから $httpBackend を削除し、代わりにスタブをモックして、任意の順序で解決できる promise を返すことができました。

于 2015-02-27T12:11:39.240 に答える