如何测试模块的运行块

时间:2013-07-30 14:48:45

标签: angularjs

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

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:12)

您可以通过模块的_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

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:2)

你签出了$ routeProvider解析属性吗?您可以使用resolve属性检查用户的登录状态并采取相应措施。请参阅http://www.youtube.com/watch?v=P6KITGRQujQhttp://docs.angularjs.org/api/ng.$routeProvider#when

在resolve对象中,您可以包含需要解析的服务和/或工厂的名称(因此对服务/工厂进行单独的单元测试),或者逻辑是否足够简单而不是需要在自己的服务中分解,你可以写一个新的功能