8

アプリのテストを書いています。angularjs-mocks.js を含めて、付属の素敵な dsl 関数を使用できるようにしました。

しかし、私はこのアプリを常に流動的なクライアントのバックエンドと統合しており、実際の応答に対してテストしたいので、実際に $http 要求をモックしたくはありません。

この状況で実際の http バックエンドを使用する最良の (最も簡単な) 方法は何ですか?

編集:

これを使用する潜在的な解決策を見つけました:

$httpBackend.whenPOST(/.*/).passThrough()

しかし、以下で説明するように、機能していません。壊れている可能性がありますか? 次のエラーが表示されます。

Error: Unexpected request: POST /some/url/here No more request expected

ここで問題を開きました: https://github.com/angular/angular.js/issues/1434

4

1 に答える 1

2

私はこの問題に対する手っ取り早い解決策を見つけました: $httpBackend がオーバーライドされている行をコメントアウトします (angular-mocks-1.0.2.js では 1365)。

angular.module('ngMock', ['ng']).provider({
  $browser: angular.mock.$BrowserProvider,
  $exceptionHandler: angular.mock.$ExceptionHandlerProvider,
  $log: angular.mock.$LogProvider,
  //$httpBackend: angular.mock.$HttpBackendProvider,
  $rootElement: angular.mock.$RootElementProvider
}).config(function($provide) {
  $provide.decorator('$timeout', function($delegate, $browser) {
    $delegate.flush = function() {
      $browser.defer.flush();
    };
    return $delegate;
  });
});

これはおそらく何か他のものを壊しますが、テストする必要があるものをテストすることができ、本番アプリには影響しないので、私には問題ありません. 将来的には、これを行う方法が組み込まれることを願っています。

于 2012-10-10T18:40:38.263 に答える