我试图测试以下代码:
$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>
我错过了什么?提前谢谢。
答案 0 :(得分:2)
参数需要单独传递给$ emit,而不是作为单个对象传递,即:
this.$rootScope.$emit('$routeChangeError', null, null, null, 'Unauthenticated');