Ошибка: [$ 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
Вопрос: Как исправить это, чтобы тест прошел?
Ответы
Ответ 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'
],
Если они не включены здесь, они не могут быть доступны в модульных тестах