2

すべての http 呼び出しの URL を変更するために、Angular サービス $httpBackend のデコレーターを使用しています。

app.config(function($provide) {
   $provide.decorator('$httpBackend', function($delegate) {
      return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {
          url = changeUrl(url);
          $delegate(method, url, post, callback, headers, timeout, withCredentials, responseType);
      };
   })
});

一部の Jasmine テストでは、$httpBackend サービスをモックする必要があります。

describe('...', function() {
    beforeEach(module('...'));
    beforeEach(inject(function($injector) {
        $httpBackend = $injector.get('$httpBackend');
        $httpBackend.when('GET', '...').respond(function(method, url) {
            return ...
        });
    }));
}

これらのテストを実行すると、「$httpBackend.when は関数ではありません」というエラーが表示されます。

これを修正する方法はありますか?アプリの構成にテスト固有のコードを持たないソリューションを希望します。

4

1 に答える 1

3

特定のモジュールでデコレータを定義するだけでよく、テストでそのモジュールをロードしないでください。

httpBackend を装飾する代わりに、http インターセプターを使用することもできます。テストにロードすると同じ問題が発生します (ただし、必要に応じて、同じ手法を使用してテストにロードしないようにすることもできます)。

于 2015-10-25T15:11:59.110 に答える