Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何测试模块的运行块_Angularjs - Fatal编程技术网

Angularjs 如何测试模块的运行块

Angularjs 如何测试模块的运行块,angularjs,Angularjs,我希望我的AngularJS应用程序发出http请求,从服务器检索用户信息或重定向到登录屏幕。我在我的应用程序主模块的运行块中实现了这一点。但是如何在运行块中测试代码?或者我应该在控制器中移动此初始化代码以使其可测试?我在用Karma和Jasmine写测试 任何帮助都将不胜感激 您是否签出了$routeProvider resolve属性?您可以使用resolve属性检查用户的登录状态,并采取相应的行动。看到和 在resolve对象中,您可以包括需要解析的服务和/或工厂的名称(因此对服务/工厂有

我希望我的AngularJS应用程序发出http请求,从服务器检索用户信息或重定向到登录屏幕。我在我的应用程序主模块的运行块中实现了这一点。但是如何在运行块中测试代码?或者我应该在控制器中移动此初始化代码以使其可测试?我在用Karma和Jasmine写测试


任何帮助都将不胜感激

您是否签出了$routeProvider resolve属性?您可以使用resolve属性检查用户的登录状态,并采取相应的行动。看到和


在resolve对象中,您可以包括需要解析的服务和/或工厂的名称(因此对服务/工厂有单独的单元测试),或者如果逻辑足够简单,不需要在其自身的服务中进行分解,您只需编写一个新函数即可

您可以通过模块的_runBlocks属性获取对运行块的引用

包含模块代码的文件:

angular.module('xmpl', []).
  run(function() {
    // some code here
  });
测试套件:

var myModule = angular.module('xmpl'),
    runBlock = myModule._runBlocks[0];
// Now can test the runBlock function according to your scenario

一种解决方案是将run块中的代码移动到服务中:

angular.module('app', [])
  .run(function(runBlockService) {
    runBlockService.run();
  });

并为该服务编写单元测试。

谢谢,这很有效!但在我的例子中,正如我这样定义我的run块:angular.module('app',[]).run(['dep',function(dep){…]);我必须以angular.module(“app”)的形式访问实际运行块函数。\u runBlocks[0][1]一个有用的说明是,您可以使用
$injector.invoke
将依赖项注入运行块。感谢您指出这一点。如果我想在每次路线更改时检查会话,这将非常好,但是因为我只想在第一次进入我的应用程序时检查会话,所以我将依赖于run block。