我如何testingangular度的事件?
我需要testing事件得到正确发射或广播,并手动触发事件。
什么是最好的方法来做到这一点?
如果你只是需要一些事件触发和捕捉的testing,这是我如何做到这一点。 为了确保某个事件被触发( $emit -ed或$broadcast -ed),间谍是要走的路。 您需要引用将要调用$emit或$broadcast ,然后执行如下操作: 
 spyOn(scope, "$emit") //run code to test expect(scope.$emit).toHaveBeenCalledWith("MY_EVENT_ID", other, possible, args); 
 如果您不需要或不想担心通过$emit传递的参数,则可以在$rootScope上放置一个$on ,并设置一个标志来知道事件是否已经发出。 像这样的东西: 
 var eventEmitted = false; $rootScope.$on("MY_EVENT_ID", function() { eventEmitted = true; }); //run code to test expect(eventEmitted).toBe(true); 
 对于捕获事件时运行的testingfunction( $on ),这有点简单。 只需从inject函数获取$rootScope ,然后发送所需的事件。 
 $rootScope.$broadcast("EVENT_TO_TEST", other, possible, args); //expects for event here 
现在,我想这个事件处理将在一个指令或控制器(或两者)中进行。要设置指令testing,请参阅https://github.com/vojtajina/ng-directive-testing 。 有关设置控制器testing,请参阅https://github.com/angular/angular-phonecat/blob/master/test/unit/controllersSpec.js#L27
希望这可以帮助。
下面是你应该遵循的angular度JS的$广播事件的步骤
在初始化rootScope和作用域存根时,如下所示:
 var rootScope; var scopeStub = beforeEach(function() { inject(function($rootScope, _$controller_) { rootScope = $rootScope; scopeStub = $rootScope.$new(); $controller = _$controller_; }); }); 
创build控制器后,使用rootScope引发事件,如下所示:
 rootScope.$broadcast('eventName', parameter1);