gpt4 book ai didi

unit-testing - 测试在主模块 .run 方法中运行的 AngularJS 代码

转载 作者:行者123 更新时间:2023-12-04 05:08:05 25 4
gpt4 key购买 nike

所以我开始为我编写的 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});

行。我是否应该将此逻辑放在其他地方以便我可以对该代码进行单元测试?

最佳答案

我会将您想要测试的所有这些代码移动到一个服务中,然后将其注入(inject)到您的运行 block 中。然后你就可以独立测试这个服务了。然后,您还可以设置模块来更灵活地测试依赖于身份验证的其他内容。

关于unit-testing - 测试在主模块 .run 方法中运行的 AngularJS 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13236570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com