0

我们有一个项目(角度)和一些单元测试(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 注入到模块中而不会破坏缩小?

4

1 回答 1

0

内联注入:

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

现在,如果您想将函数绑定到需要服务的第 3 方库,假设在我的示例中,您的函数需要服务 CRUDService 并从第 3 方接收 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,我猜是口味问题。

于 2016-05-19T12:07:52.660 回答