javascript - 测试 $routeChangeError 无法设置参数

标签 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('/');
});

但是,由于 Angular 控制此事件,所以我传递给 $emit 的任何参数都无法到达另一端。事实上,除了“事件”之外,一切都是未定义的,它填充了实际事件。

路线是这样的:

    .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'));

我也尝试过创建 Controller 并使用 $q.reject('Unauthenticated') 注入(inject)它,应用范围但这根本不会引发事件。

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

最佳答案

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

关于javascript - 测试 $routeChangeError 无法设置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23296199/

相关文章:

AngularJS 与 $resource 和 $httpBackend 的奇怪行为

angular - 检查是否在 Angular Jasmine 测试用例中调用内部方法

javascript - 浏览器通过 Angular 路由在 SPA 内触发重新加载

javascript - 你如何在 AngularJS 上检索单个帖子?

javascript - 为什么我的 "npm test"不能用于我的 Angular2 项目?

javascript - 如何通过调整图像大小和应用 attr 来减少页面加载时间?

javascript - 页面加载时 Angular ng 禁用按钮

javascript - 如何将对象放入三元条件中?

javascript - 想要在不增加或减少任何单个像素的情况下显示从 1680 到 980 分辨率的相似 View

javascript - 使用 ng-init 设置的变量未定义