测试在其函数

时间:2016-05-03 21:38:09

标签: angularjs

我需要修改一个常量服务。这项服务没有附加测试,但我想,至少部分地,用我将用Jasmine编写的单元测试来覆盖文件和我的修改。

该服务如下:

(function () {
    angular
   .module('app')
   .constant('myService', myService);

   function myService() {
       dependencyOne: dependencyOneImpl,
       someFunction: someFunctionImpl
       ...
   }

   dependencyOneImpl.$inject = ['someDependency'];
   function dependencyOneImpl(someDependency) {
       ...
   }

   someFunctionImpl.$inject = ['dependencyOne', 'dependencyTwo'];
   function someFunctionImpl(dependencyOne, dependencyTwo) {
       ...
   } 
})();

它用于路线的解决过程(我们使用ui-router)。激活特定路由时,将调用服务的功能:

someRoute = {
    url: '...',
    name: '...'
    views: { ... },
    resolve: { resolver.someFunction }
}

在构建服务时不需要依赖项,我试图测试服务公开的一个公共函数。

通常我会写测试:

prepareSomeSetup();
theService.someFunction();
assertSomething();

我可以手动解析函数所需的依赖项,但我想知道我是否可以获得ui-router在解析函数时获得的相同行为。似乎解决了依赖关系并执行了该函数。

我突然想到我可能需要在测试文件中注入$ injector服务并手动调用invoke以解决该功能,但它似乎不起作用。

如何在解析了两个依赖项的情况下调用该函数?

1 个答案:

答案 0 :(得分:1)

定义注射功能时,必须使用$injector.invoke(fn, scope, otherArgs);

进行调用

其中

  • fn注射功能,或用于内联注射的阵列
  • 范围:"此"功能
  • otherArgs:其他未定义为服务的参数,...以您注入的角度显示。