我希望我的 AngularJS 应用程序发出 http 请求以从服务器检索用户信息或重定向到登录屏幕。我在我的应用程序主模块的运行块中实现了这一点。但是如何在运行块中测试代码?或者我应该在控制器中移动这个初始化代码以使其可测试?我正在用 Karma 和 Jasmine 编写测试。
任何帮助,将不胜感激!
我希望我的 AngularJS 应用程序发出 http 请求以从服务器检索用户信息或重定向到登录屏幕。我在我的应用程序主模块的运行块中实现了这一点。但是如何在运行块中测试代码?或者我应该在控制器中移动这个初始化代码以使其可测试?我正在用 Karma 和 Jasmine 编写测试。
任何帮助,将不胜感激!
您可以通过模块的 _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
一种解决方案是将运行块中的代码移动到服务中:
angular.module('app', [])
.run(function(runBlockService) {
runBlockService.run();
});
并为该服务编写单元测试。
你检查过 $routeProvider 解析属性了吗?您可以使用 resolve 属性检查用户的登录状态并采取相应措施。请参阅http://www.youtube.com/watch?v=P6KITGRQujQ和http://docs.angularjs.org/api/ng.$routeProvider#when
在解析对象中,您可以包含需要解析的服务和/或工厂的名称(因此对服务/工厂有单独的单元测试),或者如果逻辑足够简单并且不需要在自己的服务中爆发,你可以写一个新的功能