我需要测试事件是否正确发出或广播,并手动触发事件。
最好的方法是什么?
如果您只需要对事件触发和捕获进行一些测试,这就是我的方法。为了确保触发某个事件($emit-ed或$broadcast-ed),必须采取间谍措施。您需要引用将要调用$emitor 的范围,$broadcast然后才可以执行以下操作:
$emit
$broadcast
spyOn(scope, "$emit") //run code to test expect(scope.$emit).toHaveBeenCalledWith("MY_EVENT_ID", other, possible, args);
如果您不需要或不想担心随传递的参数,则$emit可以在$on上放一个,$rootScope并设置一个标志以了解该事件已发出。像这样:
$on
$rootScope
var eventEmitted = false; $rootScope.$on("MY_EVENT_ID", function() { eventEmitted = true; }); //run code to test expect(eventEmitted).toBe(true);
对于在捕获事件($on)时运行的测试功能,要容易一些。只需$rootScope从inject函数中获取a ,然后发送所需的事件即可。
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
希望这可以帮助。