Ken*_*nne 66 unit-testing javascript-events jasmine angularjs angularjs-directive
我需要测试事件是否正确发出或广播,并手动触发事件.
最好的方法是什么?
dnc*_*253 121
如果您只需要对事件触发和捕获进行一些测试,我就是这样做的.为了确保某个事件被触发($emit-ed或$broadcast-ed),间谍是可行的方法.您需要引用将调用$emitor 的范围,$broadcast然后只需执行以下操作:
spyOn(scope, "$emit")
//run code to test
expect(scope.$emit).toHaveBeenCalledWith("MY_EVENT_ID", other, possible, args);
如果你不需要或者不想担心传递的参数$emit,你可以$on在上面$rootScope设置一个标志来知道发出的事件.像这样的东西:
var eventEmitted = false;
$rootScope.$on("MY_EVENT_ID", function() {
   eventEmitted = true;
});
//run code to test
expect(eventEmitted).toBe(true);
对于测试事件被捕获时运行的功能($on),它会更容易一些.只需$rootScope从inject函数中获取一个,然后发送所需的事件.
$rootScope.$broadcast("EVENT_TO_TEST", other, possible, args);
//expects for event here
现在,我想这个事件处理将发生在指令或控制器(或两者)中.有关设置指令测试,请参阅https://github.com/vojtajina/ng-directive-testing.有关设置控制器测试的信息,请参阅https://github.com/angular/angular-phonecat/blob/master/test/unit/controllersSpec.js#L27
希望这可以帮助.
| 归档时间: | 
 | 
| 查看次数: | 40891 次 | 
| 最近记录: |