$httpBackend.when не является ошибкой функции при имитации AngularJS $httpBackend в тестах Jasmine и использовании декоратора

Я использую декоратор для службы Angular $httpBackend, чтобы изменить URL-адреса всех http-вызовов:

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 не является функцией» при выполнении этих тестов.

Есть идеи, как это исправить? Я бы предпочел решение без тестового кода в моей конфигурации приложения.


person cnmuc    schedule 25.10.2015    source источник
comment
Определите декоратор в конкретном модуле и не загружайте этот модуль в свой тест.   -  person JB Nizet    schedule 25.10.2015
comment
Это было легко ;) Просто скопируйте свой комментарий, и я приму его как ответ. Ткс!   -  person cnmuc    schedule 25.10.2015
comment
показать пример этого. Я все еще получаю сообщение об ошибке   -  person Winnemucca    schedule 17.03.2016


Ответы (1)


Вы можете просто определить декоратор в конкретном модуле и не загружать этот модуль в свой тест.

Вместо украшения httpBackend вы также можете использовать перехватчик http. Загрузка его в ваши тесты вызовет ту же проблему (но вы все равно можете использовать ту же технику, чтобы не загружать его в тесты, если хотите).

person JB Nizet    schedule 25.10.2015
comment
У меня такая же проблема: что вы имеете в виду, определяя декоратор в конкретном модуле и не загружая этот модуль в свой тест? Можете ли вы показать простой пример того, как это будет выглядеть? - person user3897392; 05.02.2016
comment
Я нашел полезную ссылку на другое переполнение стека, которое помогло мне понять, как иметь два отдельных модуля и загружать их в один объединенный модуль: stackoverflow.com/questions/18512434/ - person user3897392; 05.02.2016