" $ httpBackend.when不是一个函数"在Jasmine测试中模拟AngularJS $ httpBackend并使用装饰器时出错

时间:2015-10-25 11:21:26

标签: angularjs jasmine decorator angular-http angular-http-interceptors

我使用装饰器进行Angular服务$ httpBackend来更改所有http调用的URL:

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不是一个功能"在执行这些测试时。

知道怎么解决这个问题吗?我的app应用配置中没有测试特定代码,我更喜欢解决方案。

1 个答案:

答案 0 :(得分:3)

您可以在特定模块中定义装饰器,并且不要在测试中加载该模块。

您也可以使用http拦截器,而不是装饰httpBackend。在测试中加载它会导致同样的问题(但是如果你愿意的话,你仍然可以使用相同的技术来避免在测试中加载它。)