【问题标题】:Unit Testing in ui-router resolve callbackui-router 中的单元测试解析回调
【发布时间】:2016-08-29 00:58:45
【问题描述】:

我一直在从事一个项目,并且一直在使用 ui-router 插件。 当我检查代码的覆盖级别时,总是在解析函数回调中,我的覆盖工具说我的测试从不执行解析函数。

我的问题:

应该如何测试这段代码?

代码示例:

$stateProvider
      .state('measures.users', {
        url: 'users',
        views: {
          'navbar': APP_SETTINGS.NAVBAR_SETTINGS,
          'main': {
            templateUrl: 'assets/views/users/users.html',
            controller: 'UsersController',
            controllerAs: 'users',
            resolve: {
              UsersResolve: ['UsersService', function(UsersService){

                  //My coverage tool never pass in here. 
                  //I need testing this area but i dont know what should be test
                  return UsersService.getUsers();
              }]
            }
          }
        }
      })

编辑 最后,我测试当我转换到状态“measures.users”时我的服务是否被调用。

describe('State check', function(){

    var state, rootScope, UsersService;

    beforeEach(module('exampleApp'));
    beforeEach(inject(eachSpecSetup));

    function eachSpecSetup($state, $rootScope, $controller,_UsersService_){
        state = $state;
        UsersService = _UsersService_;
        rootScope = $rootScope;
    }

    it('should be call a UsersService.getUsers to resolve the array to state users', spec1);

    function spec1(){

        spyOn(UsersService, 'getUsers');

        state.go('measures.users');
        rootScope.$digest();

        expect(UsersService.getUsers).toHaveBeenCalled();
    }

});

here中的类似示例

【问题讨论】:

    标签: angularjs angular-ui-router jasmine istanbul


    【解决方案1】:

    只要确保:

    1. url 'users' 包含在您的测试中;
    2. 在 UsersController 中,您必须调用 UsersResolve 服务。

    您的resolve 中可能存在一些语法错误:

    $stateProvider
      .state('measures.users', {
        url: 'users',
        views: {
          'navbar': APP_SETTINGS.NAVBAR_SETTINGS,
          'main': {
            templateUrl: 'assets/views/users/users.html',
            controller: 'UsersController',
            controllerAs: 'users',
            resolve: {
              UsersService: UsersServuce,
              UsersResolve: function(UsersService){
                  return UsersService.getUsers();
              }
            }
          }
        }
      })
    

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 2017-05-09
      • 2013-02-05
      • 1970-01-01
      • 2018-01-20
      相关资源
      最近更新 更多