Unit testing 使用Angular UI路由器进行Angular JS/Karma单元测试

Unit testing 使用Angular UI路由器进行Angular JS/Karma单元测试,unit-testing,angularjs,gruntjs,angular-ui,karma-runner,Unit Testing,Angularjs,Gruntjs,Angular Ui,Karma Runner,我正在开发一个Angular应用程序,它使用Angular UI路由器来路由和维护状态。我很难让我的单元测试进行编译。似乎无论我做什么,我总是会得到以下错误: Error: State '' is not navigable 我在我的应用程序中设置了以下状态,以及以下重定向: app.config(function($stateProvider, $urlRouterProvider) { var paramList = '?beds&lat&lon&zoom';

我正在开发一个Angular应用程序,它使用Angular 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测试运行得很好。

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

state( '', { ... } )

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

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

我尝试了这个,现在得到的错误是
uncaughterror:State''已经从app定义了。