这里有很多关于其他语言中单元测试事件处理程序的问题,但是当涉及到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开发人员应该对其事件处理函数进行单元测试吗?
handleCheckboxClick
这样的东西。应该根据函数的作用而非使用方式来命名函数。在这种情况下,toggleRelevantData
可能是一个更好的名称。 - George Mauer