【问题标题】:Angular JS/Karma Unit Testing with Angular UI-Router使用 Angular UI-Router 进行 Angular JS/Karma 单元测试
【发布时间】:2013-07-15 23:47:35
【问题描述】:

我正在开发一个使用 Angular UI-Router 进行路由和维护状态的 Angular 应用程序。我很难让我的单元测试甚至编译。似乎无论我做什么,我都会收到以下错误:

Error: State '' is not navigable

我在我的应用中设置了以下状态,以及以下重定向:

app.config(function($stateProvider, $urlRouterProvider) {

var paramList = '?beds&lat&lon&zoom';

$urlRouterProvider
    .when('', '/')
    .when('/', '/search')
    .when('/search', '/search/list')
    .otherwise('');

$stateProvider
    .state('search', {
        abstract: true,
        url: '/search',
        templateUrl: 'views/search.html',
        controller: 'SearchCtrl'
     })
        .state('search.list', {
            url: '/list' + paramList,
            templateUrl: 'views/search-list.html'
         })
        .state('search.map', {
            url: '/map' + paramList,
            templateUrl: 'views/search-map.html'
        })
    .state('search.listing', {
        url: '/listing/:id' + paramList,
        templateUrl: 'views/search-listing.html'
    })
    .state('favorites', {
        url: '/favorites',
        templateUrl: 'views/favorites.html'
    })
});

我已经花了一整天的时间试图让一个测试工作,但无论我采取什么方法,我总是以同样的错误告终。我的 e2e 测试运行良好。

【问题讨论】:

    标签: unit-testing angularjs gruntjs angular-ui karma-runner


    【解决方案1】:

    ui-router 自动为'' 添加了一个内部状态,所以这就是你得到的错误。我建议为基本状态添加'/' url,并将“否则”调用更改为重定向到“/”而不是“”。由于您的.otherwise('') 调用,正在尝试内部'' 状态。所以不妨试试这个:

    $urlRouterProvider
    .when('/', '/search')
    .when('/search', '/search/list')
    .otherwise('/');
    

    【讨论】:

      【解决方案2】:

      乍一看,我会说 $stateProvider 告诉您需要在其中放置一个空状态。将此添加到状态列表中。

      state( '', { ... } )
      

      【讨论】:

      • 我试过这个,我现在得到的错误是Uncaught Error: State ''' is already defined from app
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      • 2019-07-01
      • 1970-01-01
      • 2020-04-02
      • 2016-08-14
      • 2016-04-05
      相关资源
      最近更新 更多