2013-07-15 176 views
2

我正在使用Angular UI-Router进行路由和维护状态的Angular应用程序。我很难让我的单元测试甚至编译。看来,无论我做什么,我不断收到以下错误:Angular JS/Karma单元测试与角度UI路由器

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测试运行得很好。

回答

0

乍一看,我会说它看起来像$ stateProvider告诉你,你需要把一个空的状态在那里。将其添加到状态列表中。

state('', { ... }) 
+0

我尝试这样做,我现在得到的错误是'未捕获的错误:国家“””已经从app'定义。 – davitykale

1

ui-router会自动为''添加一个内部状态,所以这就是您所得到的错误。我建议为基本状态添加一个'/'网址,并将'其他'调用改为重定向到'/'而不是''。由于你的.otherwise('')调用,内部''状态正在尝试。因此,也许试试这个:

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