我在代码中使用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语句,然后我的测试开始通过。
为什么会这样?什么是解决这个问题的方法?