否则在$ urlRouterProvider上重定向到不应该在单元测试中的状态

时间:2015-09-11 03:59:52

标签: javascript angularjs unit-testing angular-ui-router

我在代码中使用ui-router,这是我在应用程序中定义状态的方法:

    $stateProvider
        .state('base', {
            url: '/',
            templateUrl: '../views/base.html',
            controller: 'BaseCtrl'
        })
        .state('login', {
            url: '/login',
            templateUrl: 'views/login.html',
            controller: 'LoginCtrl'
        })
        .state('base.all', {
            url: '^/home',
            templateUrl: '../views/all.html',
            controller: 'AllCtrl'
        });

     $urlRouterProvider.otherwise('/home');

我正在对执行此操作的代码进行单元测试:

    $state.transitionTo('login');

在我的茉莉花测试中,我检查:

   expect($state.current.name).toEqual('login');

不幸的是,这最终导致测试失败,并显示以下消息:

Expected 'base.all' to equal 'login'.

我发现问题肯定与$ urlRouterProvider.otherwise有关,因为它使我的代码转到'base.all'而不是'login'状态。为了证明这一点,我注释掉了$ urlRouterProvider.otherwise语句,然后我的测试开始通过。

为什么会这样?什么是解决这个问题的方法?

1 个答案:

答案 0 :(得分:0)

你可以交换transitionTo()调用go()调用吗?

根据this,除非您有特殊需要,否则应使用go()