设置和测试UI路由器

时间:2016-01-07 15:36:53

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

我正在尝试使用使用ui路由的ncy-angular-breadcrumb。我有一个模块设置来容纳ui路线:

(function () {
    var app = angular.module('configurator.uiroutes', ['ui.router', 'ncy-angular-breadcrumb']);

    app.config(['$stateProvider', function ($stateProvider) {
        $stateProvider
            .state('home', {
                url: '/',
                ncyBreadcrumb: {
                    label: 'Series'
                }
            });
    }]);

})();

我有这个测试,看看路线是否有效:

describe('Configurator UI Routes', function () {

    beforeEach(module('configurator.uiroutes'));
    beforeEach(module('ui.router'));

    var $state, $rootscope, state = '/';

    // Inject and assign the $state and $rootscope services.
    beforeEach(inject(function (_$state_, _$rootScope_) {
        $state = _$state_;
        $rootscope = _$rootScope_;
    }));

    //Test whether the url is correct
    it('should activate the state', function () {
        $state.go(state);
        $rootscope.$digest();
        expect($state.current.name).toBe('home');
    });
});

产生此错误:

Error: Could not resolve '/' from state ''

我只是没有获得UI路由器以及它是如何工作的,或它应该做什么。我只想抓取部分网址并将该信息传递给ncyBreadcrumb,但我甚至无法获得基本网址。

任何指针或帮助都会很棒!

编辑:我已通过在测试中将'/'替换为'home'来通过测试。我更大的问题是:有没有办法测试当命中URL'/'时,state.current.name变为'home'。在我使用应用程序时,这似乎并没有发生,我希望单元测试可以帮助告诉我原因。

这是单页应用程序,如果相关的话。

1 个答案:

答案 0 :(得分:1)

错误已经足够自我解释了,因为您要求ui-router使用/重定向$state.go状态

基本上$state.go要求提供州名而不是url

var $state, $rootscope, state = 'home'; //<--changed from `/` to `home`