angularJS:单元测试给出:未知提供者:$ httpProviderProvider< - $ httpProvider

时间:2013-11-04 12:04:28

标签: javascript unit-testing angularjs

在我的一个单元测试中,我正在尝试

beforeEach(function () {
    angular.mock.inject(function ($injector) {
        $httpBackend = $injector.get('$httpBackend');
        mockUserResource = $injector.get('User');
        $httpProvider = $injector.get('$httpProvider');  // <-- problem
        $httpProvider.interceptors.push('myInterceptor');
    });
});

demo

为什么无法注入$ httpProvider?

我这样做的原因是因为我没有加载添加所有拦截器的文件,因为我想逐个测试它们!

2 个答案:

答案 0 :(得分:10)

提供者只能在配置阶段angular.config注入。

根据this answer,您可以尝试以下内容:

beforeEach(module('yourModule', function($httpProvider) {
  $httpProvider.interceptors.push('myInterceptor');
}));

beforeEach(function() {
  angular.mock.inject(function($injector) {
    $httpBackend = $injector.get('$httpBackend');
    mockUserResource = $injector.get('User');
  });
});

有关依赖注入如何工作的更多信息,this是一篇很棒的文章(不是由AngularJS团队编写的)

答案 1 :(得分:1)

名称Provider会自动按角度添加。所以,你应该注入$http

$httpProvider = $injector.get('$http'); 

这是一个working fork of your fiddle