错误:[$injector:unpr] 未知提供者:在 AngularJS 服务测试中

Posted

技术标签:

【中文标题】错误:[$injector:unpr] 未知提供者:在 AngularJS 服务测试中【英文标题】:Error: [$injector:unpr] Unknown provider: in AngularJS Service Test 【发布时间】:2014-01-24 05:57:48 【问题描述】:

我在为 AngularJS 服务正确提供依赖项时遇到很多麻烦。

我在 *** 上看到了许多其他类似错误的帖子,但似乎都没有解决问题。

这是应用程序代码:

cm.modules.app = angular.module('myApp', ['ngRoute', 'ngAnimate']);
myServiceName = function($http) 
    // do stuff
;
myServiceName.prototype.value = 1;

cm.modules.app.service('defaultAlertFactoryA', myServiceName);

这里是测试代码:

describe('test alertFactoryA', function() 
  var $provide;
  var mAlertFactoryA;

  beforeEach(module(cm.modules.app));

  beforeEach(angular.mock.module(function(_$provide_) 
    $provide = _$provide_;
  ));

  beforeEach(function() 
    inject(function($injector) 
      mAlertFactoryA = $injector.get('defaultAlertFactoryA');
    );
  );

  it('should work', function() 
    expect(true).toBe(true);
  );
);

这是错误:

错误:[$injector:unpr] 未知提供者:defaultAlertFactoryAProvider http://errors.angularjs.org/1.2.0-rc.2/$injector/unpr?p0=defaultAlertFactoryAProvider%20%3C-%20defaultAlertFactoryA

问题:如何解决此问题以使测试通过?

【问题讨论】:

您的服务文件是否包含在您的业力配置文件中? (我假设你正在使用业力) @dcodesmith 我正在使用 Karma... 是的;检查我做了 console.log(myServiceName);从测试中,它解决了参考罚款 【参考方案1】:

为了引导您的模块,您需要提供其名称

beforeEach(module('myApp'));

Demo

【讨论】:

【参考方案2】:

以下是我用来让它工作的(最后)

 beforeEach(function() 
    module(cm.modules.app.name);

    module(function($provide) 
      $provide.service('defaultAlertFactoryA', myServiceName);
    );

    inject(function($injector) 
      defaultAlertFactory = $injector.get('defaultAlertFactoryA');
    );
 );

【讨论】:

【参考方案3】:

听起来您需要在 karma.conf.js 文件中包含服务文件

files: [

  'app/bower_components/angular/angular.js',
  'app/bower_components/angular-mocks/angular-mocks.js',
  'app/bower_components/angular-ui-router/release/angular-ui-router.js',
  'app/app.js',
  'app/controllers/*.js',
  'app/services/*.js',
  'tests/**/*.js'
],

如果此处未包含它们,则无法在单元测试中访问它们

【讨论】:

如果您使用的是较新版本的 webpack,请确保您没有在生产模式下运行 webpack,否则它将使包中的角度源变得丑陋,您将在测试运行中收到此错误

以上是关于错误:[$injector:unpr] 未知提供者:在 AngularJS 服务测试中的主要内容,如果未能解决你的问题,请参考以下文章

错误:[$injector:unpr] 未知提供者:$routeProvider,无法实例化模块 myApp,原因是

错误:[$injector:unpr] 未知提供者:$localStorageProvider <- $localStorage <- login

未捕获的错误:[$injector:unpr] 未知提供程序:$cordovaPushV5Provider <- $cordovaPushV5

未知提供者:$routeParamsProvider <- $routeParams

正则表达式测试作为属性的指令实现错误 - 验证(打字稿+角度)

不要在角度模态中保存范围更改