【问题标题】:Otherwise on $urlRouterProvider redirects to a state when it shouldn't in unit tests否则在 $urlRouterProvider 上重定向到不应该在单元测试中的状态
【发布时间】:2015-09-11 03:59:51
【问题描述】:

我在代码中使用 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”而不是“登录”状态。为了证明这一点,我注释掉了 $urlRouterProvider.otherwise 语句,然后我的测试开始通过。

任何想法为什么会发生这种情况?而解决这个问题的方法是什么?

【问题讨论】:

  • 请提供有关测试用例和您要测试的代码的更多信息。也许变化来自其他地方。

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


【解决方案1】:

你能把 transitionTo() 调用换成 go() 调用吗?

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

【讨论】:

  • 我做到了,不幸的是它没有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
相关资源
最近更新 更多