我如何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);