使用Jasmine测试多个监听器

时间:2015-09-02 19:35:29

标签: angularjs unit-testing jasmine

我需要使用Jasmine 2.0测试控制器中的每个监听器,真的这个问题只是为了强化我的逻辑,也许有一种更优雅的方式来接近测试听众,或者我可能太彻底了!

对于codereview来说,这可能是一个更好的问题,但我会把它留在这里。如何有效地在控制器中正确测试多个按键/事件监听器?

it("should trigger the correct actions from key events", function () {
    var listenerSpy = jasmine.createSpy('listenerSpy');
    angular.forEach(scope.$$listeners, function (fn, eventName) {
        listenerSpy(eventName, fn);
        expect(listenerSpy).toHaveBeenCalledWith(eventName, fn);
    });
});

1 个答案:

答案 0 :(得分:1)

上面的内容并不是真正测试JavaScript本身以外的任何内容。您正在调用一个函数,然后期望您刚刚调用该函数。

代码覆盖率报告会显示侦听器功能根本没有执行。

如果没有看到您正在测试的代码,我无法正确建议您如何构建测试。

有两种可能的意图:

1)您是否想测试范围是否正在侦听一组已知元素? 2)你想测试监听器执行的结果吗?

通常情况下,最好选择第二条路径,因为有了它,你也会获得第一名。

您的所有听众是否都在执行相同的操作?

如果是,则循环遍历已知元素列表并更改它们以验证正确的侦听器执行输出可能是有意义的。

如果听众的表现不同,则应评估每个执行的输出。