Использование издеваний Angularjs без фактического издевательства

StackOverflow https://stackoverflow.com//questions/12683586

  •  12-12-2019
  •  | 
  •  

Вопрос

Я пишу несколько тестов для нашего приложения, и я включил Angularjs-mocks.js, поэтому я могу использовать приятные функции DSL, которые поставляются с ним.

Но я не хочу, чтобы на самом деле насмешливую добавку $ http, поскольку я интегрирую это приложение с бэкэнда клиента, которая постоянно находится в потоке, и я хочу протестировать против реальных ответов.

Какой лучший (самый простой) способ использовать настоящую HTTP Backend в этой ситуации?

Редактировать:

Я нашел потенциальный раствор, который должен использовать это:

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

Но как я упоминаю ниже, это не работает, возможно сломано?Я получаю эту ошибку:

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

Я открыл проблему здесь: https://github.com/angular/angular.js / Выпуски / 1434

Это было полезно?

Решение

Я выяснил быстрое и грязное решение проблемы: комментируя линию, где $ httpbackend переопределяется (1365 в угловых макетах-1.0.2.js).

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