провайдер не найден для подчеркивания

У меня есть фабрика angularjs, в которую я ввожу подчеркивание, и приложение работает нормально, но когда я пытаюсь написать на нем тестовые примеры жасмина, я получаю сообщение об ошибке. Поставщик подчеркивания не найден. У меня есть моя фабрика, например

angular.module("sample")
.factory("example", example);
 example.$inject = ["$document", "$compile", "$rootScope", "$timeout", "$q", "underscore"];
function example($document, $compile, $rootScope, $timeout, $q, _) {

}

и у меня есть мой модуль, определенный как

(function(){
angular.module(samlple,[]);
})();

и мой тестовый пример такой

beforeEach(module('sample'));
beforeEach(module('ionic'));
beforeEach(inject(function ($document, $compile, $rootScope, $timeout,underscore,example) {

}

выдает ошибку Ошибка: [$injector:unpr] Неизвестный провайдер: underscoreProvider ‹- underscore


person ashwin    schedule 21.12.2015    source источник
comment
Где определена ваша служба подчеркивания? Я предполагаю, что это не отдельный модуль, поскольку у вас нет перечисленных зависимостей...   -  person Shaun Scovil    schedule 22.12.2015
comment
Кроме того, имена ваших сервисов должны быть окружены символами подчеркивания (например: underscore, example) при их внедрении с помощью функции inject() в вашем тесте.   -  person Shaun Scovil    schedule 22.12.2015


Ответы (2)


Добавьте подчеркивание импорта в свой index.html, а затем добавьте его как службу.

var underscore = angular.module('underscore', []);
    underscore.factory('_', function() {
        return window._; // assumes underscore has already been loaded on the page
    });  

И

//Now we can inject underscoreJS in the controllers
function MainCtrl($scope, _) {
  //using underscoreJS method
  _.max([1,2,3,4]); //It will return 4, which is the maximum value in the array
}

Но я рекомендую вам использовать lodash! У него есть более крутые функции. Информацию о том, как использовать lodash с Angular, вы можете найти здесь .

person Bakhtier Gaibulloev    schedule 21.12.2015

Используя ответ @Bakhtier, я использовал следующее, чтобы заставить Karma/Jasmine распознавать lodash, чтобы я мог использовать его в своих службах, а также в остальной части моего приложения.

angular.module('app', ['app.services', 'lodash']);
angular.module('app.services', ['lodash']).factory('MyService', ['_', function (_){
    // your code bits
}]);
angular.module('lodash', []).factory('_', function() {
    return window._;
});

Надеюсь, это поможет кому-то.

person Will Lovett    schedule 02.02.2018