我为我们的应用编写了一些测试,我已经包括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 / securse / 1434

有帮助吗?

解决方案

我认为解决问题的快速和肮脏的解决方案:注释出$ 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;
  });
});
.

这可能会破坏别的东西,但它让我测试我需要测试的东西,并且不会影响生产应用程序,所以对我来说没关系。希望将来会有一个建立的方式来做这件事。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top