gpt4 book ai didi

angularjs - 测试 $broadcast 事件

转载 作者:行者123 更新时间:2023-12-04 22:20:29 26 4
gpt4 key购买 nike

我有 Angular 测试的问题。我正在尝试测试 $broadcast 是否成功触发。我在尝试使用 spyOn 时出现了一些奇怪的行为。如果您有任何建议,请帮助我几个小时以来一直试图解决这个问题。我的测试是这样的:

describe('Signup controller', function() {

beforeEach(module('myApp'));

describe('SignupCtrl', function(){
var $scope, ctrl, $httpBackend, AUTH_EVENTS, $rootScope;

beforeEach(inject(function($injector, $controller,
_$httpBackend_, _apiUrl_, _AUTH_EVENTS_){

$rootScope = $injector.get('$rootScope');
$scope = $rootScope.$new();
ctrl = $controller('SignupCtrl', {$scope: $scope});
$httpBackend = _$httpBackend_;
apiUrl = _apiUrl_;
AUTH_EVENTS = _AUTH_EVENTS_;
spyOn($rootScope, "$broadcast");
}
));

afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});

it('should show error message from API', function() {
var apiMessage = 'That email already exists.';
$httpBackend.expectPOST('/users').respond(400, {
message: apiMessage
});

// call controller register function with mock empty credentials
$scope.register({});

$httpBackend.flush();
expect($rootScope.$broadcast).toHaveBeenCalledWith(AUTH_EVENTS.signupFailed);
expect($scope.errorMessage).toBe(apiMessage);
expect($scope.showErrorMessage).toBe(true);
});

});
});

我得到的错误是:
TypeError: 'undefined' is not an object (evaluating '$rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl).
defaultPrevented')
at /src/web/src/vendor-bower/angular/angular.js:9789
at /src/web/src/vendor-bower/angular/angular.js:12595
at /src/web/src/vendor-bower/angular/angular.js:12407
at /src/web/src/vendor-bower/angular-mocks/angular-mocks.js:1438

最佳答案

尝试 spyOn(rootScope,'$broadcast').andCallThrough(); 并让我知道它是怎么回事。另见我的评论。

关于angularjs - 测试 $broadcast 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24744001/

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