Подтвердить что ты не робот

Ошибка: [$ injector: unpr] Неизвестный поставщик: в тесте службы AngularJS

У меня много проблем с получением зависимостей, предоставляемых должным образом для службы 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/ $injector/unpr? p0 = defaultAlertFactoryAProvider %20% 3C- %20defaultAlertFactoryA

Вопрос: Как исправить это, чтобы тест прошел?

4b9b3361

Ответ 1

Следующее - это то, что я использовал, чтобы заставить его работать (наконец)

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

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

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

Ответ 2

Чтобы загрузить модуль, вам необходимо указать его имя

beforeEach(module('myApp'));

Демо

Ответ 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'
],

Если они не включены здесь, они не могут быть доступны в модульных тестах