【发布时间】:2014-12-31 02:19:48
【问题描述】:
这里有很多关于其他语言的单元测试事件处理程序的问题,但我一直无法找到关于 JavaScript 的好的答案。具体来说,我说的是这样一个案例:
// inside a "view" class definition:
handleCheckboxClick: function() {
this.relevantData.toggleSomeValue();
return false;
}
// later on:
$('#someCheckbox').on('click', view.handleCheckboxClick);
显然,事件处理程序 (this.relevantData.toggleSomeValue()) 中有逻辑,但同时没有其他方法会调用此处理程序,因此它不像单元测试那样会捕获一些未来与重构相关的错误。在任何给定的 JavaScript 代码库中,都有很多这样的处理程序,因此测试它们的工作量并不小。
另外,在许多 JS 商店(当然是我们的)中,也有使用 Selenium 进行的功能级测试,这些测试通常会发现明显的 UI 问题(例如事件处理程序中断时)。
所以,一方面我得到了“逻辑单元测试 == 好”,而且我不想因为以后支付费用而不测试某些代码而自取其辱。另一方面,当涉及到单元测试时,这个特定的代码子集似乎具有高成本和低价值。因此,我对 SO 社区的问题是,JS 开发人员是否应该对他们的事件处理功能进行单元测试?
【问题讨论】:
-
单元测试是娘炮,写出有效的代码!换句话说,我认为对简单事件处理程序进行单元测试是浪费时间。
-
@adeneo 从单元测试的角度来看,事件处理程序与其他代码有何不同?
-
(尽管我之前有评论,但我认为这是一个更好的情况,可以通过 UI / 集成测试来选择。)
-
嗯,我不太关心单元测试,但我确实将它用于可能存在设计缺陷的大型项目。对于一些 jQuery 事件处理程序,没有那么多(根本不是真的)!
-
请不要将函数命名为
handleCheckboxClick。以它们的作用命名函数,而不是它们的使用方式。在这种情况下,toggleRelevantData可能是一个更好的名称。