【问题标题】:angularJS: unit tests gives: Unknown provider: $httpProviderProvider <- $httpProviderangularJS:单元测试给出:未知提供者:$httpProviderProvider <- $httpProvider
【发布时间】:2013-11-04 12:04:27
【问题描述】:

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

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 ?

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

【问题讨论】:

  • 一流的问题,如此简洁且易于搜索!我遇到了这个确切的问题。

标签: javascript unit-testing angularjs


【解决方案1】:

提供者只能在配置阶段注入,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 团队编写的)

【讨论】:

    【解决方案2】:

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

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

    这是working fork of your fiddle

    【讨论】:

    • 这是正确的,只是想补充一下,您可能希望在单元测试中避免实际的 HTTP 请求。
    • 我想你忘记了他想使用拦截器配置$httpProvider。他不打算注入$http 服务。
    猜你喜欢
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2015-03-04
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多