2016-11-14 10 views
0

私はすべてのHTTPリクエストを制御するApiサービスを持っています。 GET、POST、PUT、DELETE ...モック角サービスデータの応答

私はunitTestsをいくつか書こうとしていますが、次のような状況で問題が発生します。

self.Api.post('/myEndpoint/action/', actionData) 
    .then(function(resp){ 
     result = _.get(resp, 'data.MessageList'); 
     if(resp.status = 200 && result) { 
     setActionResults(resp.data); 
     } 
    }); 

私は私のユニットで模擬したい。私は何をすべきか? httpBackendサービスをここではhttp://plnkr.co/edit/eXycLiNmlVKjaZXf0kCH?p=previewのように偽装する必要がありますか?私は他の方法でそれをすることはできますか?

答えて

2

を使用すると、アプリケーションによって行われた各リクエストを嘲笑してもうまくいくはずです。しかし、サービス全体をモックすることもできますし、元のサービスの代わりに模擬サービスを使って単体テストを行うこともできます。それにもかかわらず、httpBackendは、元のインターフェイスと同じインターフェイスで新しいサービスを作成するよりも、http要求サービスの方がはるかに簡単です。しかし場合によっては、あなたのサービスが何をしているのかを制御する必要があるかもしれません。したがって、サービスのモックを使わなければなりません。例えば

angular.module('myApp') 
    .service('DataService', function ($http) { 
     this.getData = function() { 
      return $http.get('http://my.end.point/api/v1/data') 
        .then(function (response) { 
         return response.data; 
        }); 
     }; 
    }); 

angular.module('myAppMock')  
    .service('MockedDataService', function ($q) { 
     this.getData = function() { 
      return $q.resolve({ data: 'myData' }); // you can add a delay if you like 
     } 
    }); 
+0

mockedDataServiceは私が探しているいるもの...私は私のテスト内でそれを定義することはできますか?またはあなたがそれを定義することを提案する場所? – acostela

+0

まあ、どこにでも定義できます。ほとんどの場合、これだけのために使用される分離モジュールで定義されていて、 'beforeEach'ループから追加されて特別な依存関係をオーバーライドします。 –