单元测试 – 我如何在AngularJS测试广播事件
发布时间:2020-12-17 09:04:48 所属栏目:安全 来源:网络整理
导读:我有一个控制器在rootscope上发出广播事件。我想测试broacast事件被正确触发。 我的代码在我的控制器看起来像这样: $scope.$watch("pageIndex",function(){ if($scope.pageIndex == 4) { // emit social share $rootScope.$broadcast('myEvent'); } }); 我
我有一个控制器在rootscope上发出广播事件。我想测试broacast事件被正确触发。
我的代码在我的控制器看起来像这样: $scope.$watch("pageIndex",function(){ if($scope.pageIndex == 4) { // emit social share $rootScope.$broadcast('myEvent'); } }); 我试着用下面的代码测试它: it('Should call myEvent when pageIndex is 4',function(){ scope.pageIndex = 4; scope.$apply(); expect(rootScope.$on).toHaveBeenCalledWith('myEvent'); }); 但它告诉我,代码不被调用,我已经手动测试它。我之后尝试用下面的代码: it('Should call myEvent when pageIndex is 4',function(){ var listener = jasmine.createSpy('listener'); rootScope.$on('myEvent',listener); scope.pageIndex = 4; scope.$apply(); expect(listener).toHaveBeenCalled(); }); 但具有相同的阴性结果。有没有办法测试一个事件被广播?
假设你使用Jasmine,以下是为我工作很好。
... other unit test setup code ... var rootScope; beforeEach(inject(function($injector) { rootScope = $injector.get('$rootScope'); spyOn(rootScope,'$broadcast'); })); describe("my tests",function() { it("should broadcast something",function() { expect(rootScope.$broadcast).toHaveBeenCalledWith('myEvent'); }); }); 如果您要广播消息并向其附加对象,您甚至可以测试对象是否符合预期 someObj = { ... something ... }; expect(rootScope.$broadcast).toHaveBeenCalledWith('someEvent',someObj); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |