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