所以我开始为我编写的 AngularJS 应用程序编写单元测试。此应用程序受到登录页面的保护,因此如果用户名未登录,则对登录页面以外的任何页面的任何请求都将重定向登录页面。这个逻辑是从主模块的 .run() 方法执行的,因为它只需要在应用程序启动时运行一次,但是有没有办法测试从主模块的 .run() 方法中执行的代码?我有以下测试代码:
describe('Login Controller', function(){
'use strict';
var scope, controller, $httpBackend, $resource, callback;
beforeEach(module('application'));
beforeEach(inject(function($injector, $rootScope, $controller, $http, $location, authentication, session) {
$httpBackend = $injector.get('$httpBackend');
$httpBackend.expectGET('/api/v1/authentication').respond({status: 'success', data: null});
$resource = $injector.get('$resource');
callback = jasmine.createSpy();
scope = $rootScope.$new();
controller = new $controller('Login', {
$scope: scope,
$http: $http,
$location: $location,
authentication: authentication,
session: session
});
}));
afterEach(function() {
$httpBackend.verifyrifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it('should verify all default values for controller', function() {
expect(scope.username).toEqual('');
expect(scope.password).toEqual('');
expect(scope.displayApplicationLoad).toEqual(false);
expect(angular.isFunction(scope.login)).toEqual(true);
expect(angular.isFunction(scope.logout)).toEqual(true);
expect(scope.loggedIn).toEqual(false);
expect(scope.headerTemplate).toEqual('/templates/core/header.html');
expect(scope.footerTemplate).toEqual('/templates/core/footer.html');
});
});
问题是在主模块 .run() 方法中运行的代码没有考虑到
$httpBackend.expectGET('/api/v1/authentication').respond({status: 'success', data: null});
线。我是否应该将此逻辑放在其他地方以便我可以对这段代码进行单元测试?