Минимизированная инъекция $provider с помощью jasmine и angular

У нас есть проект (angular) и несколько юнит-тестов для него (jasmine+sinon), которые при минимизации создают некоторые проблемы. Для фактического кода мы решили эти проблемы путем внедрения с использованием статически типизированного массива строк, например. ['locationService', 'etcService']. К несчастью для юнит-тестов, у минификации есть еще несколько проблем, которые нужно решить. В качестве примера:

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

Код выше сразу становится непригодным для использования, поскольку переменная провайдера переименовывается во что-то вроде «a». Я попытался немного настроить его, обернув функцию чем-то вроде ниже:

function injectTest($provide){
    // do the same stuff
}
injectTest.$inject = ['$provide'];

которое было рекомендованным решением в некоторых других онлайн-сообщениях. Проблема в том, что с модулями это действительно не работает. Я пробовал оба:

module(angular.injector().invoke(injectTest)); // which results in 'Unknown provider: $provideProvider <- $provide

а также

module(injectTest); // which results in 'Unknown provider: nProvider <- n'

Есть ли способ внедрить $provider в модуль, не нарушая минимизацию?


person Mavi Domates    schedule 19.05.2016    source источник


Ответы (1)


Встроенный впрыск:

var myFN = ['$provide', function($provide){
   // do stuff
}]

Теперь, если вы хотите привязать функцию к сторонней библиотеке, где вам нужен сервис, скажем, в моем примере вашей функции нужен сервис CRUDService и получить объекты params от стороннего поставщика:

var myFN = ['CRUDService', function(CRUDService){
   // do some init stuff
   // you can either make it a singleton by sotrng the function and return the reference or either return new function on each call
   return function(params){
       // do stuff
   };
}] ;

// now to bind it to your 3rd party
objectFor3rdParty = {fn:$injector.invoke(myFN)};

Я использую только встроенную инъекцию вместо $inject, думаю, дело вкуса.

person Walfrat    schedule 19.05.2016