测试$ routeChangeError无法设置参数

时间:2014-04-25 14:40:01

标签: javascript angularjs jasmine

我试图测试以下代码:

$rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {
    if(rejection === 'Unauthenticated') {
        $location.path('/');
    }
});

以下是测试:

it('should catch unauthorised route changes and route to log in', function() {
    spyOn(this.$location, 'path');

    this.$rootScope.$emit('$routeChangeError', { event: null, current: null, previous: null, rejection: 'Unauthenticated' });

    expect(this.$location.path).toBe('/');
});

然而,因为角度控制此事件,我传入$ emit的任何参数都无法到达另一端。事实上,除了' event'之外,所有内容都是未定义的,其中填充了实际的事件。

路线如下:

    .when('/welcome', {
        controller: 'main.controller',
        templateUrl: '/welcome.html',
        resolve: { 'authFilter': 'oauthFilter.factory' }
    });

并且authFilter看起来像这样:

(function(mainModule) {
    'use strict';
    mainModule.factory('oauthFilter.factory',
        ['$location', '$q', 'authentication.service',
        function($location, $q, authenticationService) {
            if(authenticationService.isAuthenticated()) {
                return true;
            }
            return $q.reject('Unauthenticated');
        }
    ]);
})(angular.module('main'));

我也试过创建控制器并使用$ q.reject(&#39; Unauthenticated&#39;)注入它,应用范围,但这根本不会引发事件。< / p>

我错过了什么?提前谢谢。

1 个答案:

答案 0 :(得分:2)

参数需要单独传递给$ emit,而不是作为单个对象传递,即: this.$rootScope.$emit('$routeChangeError', null, null, null, 'Unauthenticated');