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

时间:2014-01-06 18:21:38

标签: angularjs jasmine angularjs-service

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

我在StackOverflow上看到了许多其他类似错误的帖子,但似乎没有一个帖子可以解决这个问题。

以下是应用代码:

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   < - defaultAlertFactoryA   http://errors.angularjs.org/1.2.0-rc.2/ $注射器/ unpr?P0 = defaultAlertFactoryAProvider%20%3 C-%20defaultAlertFactoryA

问题:我如何解决此问题,以便测试通过?

3 个答案:

答案 0 :(得分:25)

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

beforeEach(module('myApp'));

<强> Demo

答案 1 :(得分:18)

以下是我以前的工作(最后)

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

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

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

答案 2 :(得分:10)

听起来你需要在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'
],

如果这里没有包含它们,则无法在单元测试中访问它们