2013-04-29 13 views
6

私はFeed(RSS)アプリケーションを開発する際にAngularJSユニットテストをしています。フィードはリモートのrssデータを取得して解析し、解析されたアイテムを保存できます。

beforeEach(inject(function (_$httpBackend_, _feedMock_, _mockConfig_) { 
    _$httpBackend_.when('GET', _mockConfig_.FEED_URL).respond(_feedMock_); 
})); 

、その後

$httpBackend.expectGET(mockConfig.FEED_URL); 
feed.fetch(); 
$httpBackend.flush(); 

の下に、それが正常に動作します:私はモック$ httpBackendを使用するフェッチRSSをテストします。

しかし、フィードは更新されたRSSデータを取得して新しいアイテムを追加することで状態を実現できるようにする必要があります。フィードは同じリクエストを行いますが、新しい更新データがあります。私はこのような何かによって、サーバー定義を再作成しようとしている:

$httpBackend.when('GET', _mockConfig_.FEED_URL).respond(feedMockUpdated); 

、次に期待して同じ操作をするとフラッシュが、古いデータ(feedMock)ではなく、新しい(feedMockUpdated)と$ httpBackend応答。どのようにして$ httpBackendを同じリクエストの異なるデータで応答することができますか?

答えて

17

固定データセットだけでなく、respondを機能で設定することができます。ドキュメントから

http://docs.angularjs.org/api/ngMock.$httpBackend

応答 - {関数([ステータス]データ[、ヘッダー])|関数(関数(メソッド、URL、データ、ヘッダ)} - 対応方法が返される静的データのセットや応答状態(数)、応答データ(文字列)とレスポンスヘッダ(Object)を含む配列を返すことができる機能を取る。

私はあなたに理解ように場合は、同じ終わりをしたいあなたが次のようなものを試すことができます。これは、後続の呼び出しでデータを切り替える簡単なカウンタを実装するだけです。

var rssCalled = 0; 

$httpBackend.when('GET', _mockConfig_.FEED_URL).respond(function(method, url, data, headers){ 
    if(rssCalled === 0) { 
     rssCalled++; 
     return [200, feedMock, {}]; 
    } else { 
     return [200, feedMockUpdated, {}]; 
    } 
}); 
+0

あなたは活字体を使用した場合は、[ 200、 feedMock、 {}]のようなものを返す必要があります。なぜ戻り値が配列ではなくオブジェクトであるように設計されているのか分かりません – rob

関連する問題