我需要测试事件被正确地发射或广播,并手动触发事件。
什么是最好的方法做到这一点?
如果你只是需要一些测试事件触发和捕捉,这是我怎么做。为了确保某个事件被触发($ 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);
对于测试当事件被捕获($ on)时运行的功能,它会更容易一些。只需从inject函数获取$ rootScope,然后发送所需的事件。
$rootScope.$broadcast("EVENT_TO_TEST",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
希望这可以帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。