使用angularjs模拟而不实际嘲笑任何东西

dou*_*oll 8 testing jasmine angularjs

我正在为我们的应用程序编写一些测试,并且我已经包含了angularjs-mocks.js,所以我可以使用它附带的漂亮的dsl函数.

但是我不想实际模拟$ http请求,因为我正在将这个应用程序与客户端的后端进行集成,而后端一直在不断变化,我想测试真实的响应.

在这种情况下,使用真正的http后端的最佳(最简单)方法是什么?

编辑:

我找到了一个潜在的解决方案,就是使用它:

$httpBackend.whenPOST(/.*/).passThrough()
Run Code Online (Sandbox Code Playgroud)

但正如我在下面提到的那样,它不起作用,可能会破坏?我收到此错误:

Error: Unexpected request: POST /some/url/here No more request expected
Run Code Online (Sandbox Code Playgroud)

我在这里打开了一个问题:https://github.com/angular/angular.js/issues/1434

dou*_*oll 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;
  });
});
Run Code Online (Sandbox Code Playgroud)

这可能会破坏其他东西,但它让我可以测试我需要测试的内容,并且不会影响生产应用程序,所以这对我来说没问题。希望将来会有一种内置的方法来做到这一点。