一尘不染

如何测试角度事件?

angularjs

我需要测试事件是否正确发出或广播,并手动触发事件。

最好的方法是什么?


阅读 243

收藏
2020-07-04

共1个答案

一尘不染

如果您只需要对事件触发和捕获进行一些测试,这就是我的方法。为了确保触发某个事件($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)时运行的测试功能,要容易一些。只需$rootScopeinject函数中获取a ,然后发送所需的事件即可。

$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

希望这可以帮助。

2020-07-04