5

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

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

演示

为什么不能注入 $httpProvider ?

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

4

2 回答 2

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');
  });
});

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

于 2013-11-04T12:16:26.383 回答
1

名称Provider由 angular 自动添加。所以,你应该只注入$http.

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

这是你的小提琴的工作叉

于 2013-11-04T12:10:03.690 回答