AngularJS:单元测试提示“Unknown provider: $httpProviderProvider <- $httpProvider”。

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?

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


非常棒的问题,简洁明了,易于搜索!我也遇到了这个问题。 - Breedly
2个回答

10

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

根据这个答案,你可以尝试类似以下的做法:

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团队撰写)


1
由于Angular自动添加了名称Provider,因此您只需要注入$http即可。
$httpProvider = $injector.get('$http'); 

这是一个与你的代码片段相关的可用版本,请点击此处访问

这是正确的,只是想补充一下,你可能想在单元测试中避免实际的HTTP请求。 - Benjamin Gruenbaum
5
我认为你忘记了他想要使用拦截器来配置 $httpProvider,他并不是要注入 $http 服务。 - M.K. Safi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接