我正在使用JavaScript中的模块模式以分离公共接口和私有实现。为了简化我的操作,我的代码生成一个图表。图表由多个部分组成(轴、标签、绘图区、图例等)。我的代码看起来像:
var Graph = function() {
var private_data;
function draw_legend() { ... }
function draw_plot() { ... }
function helper_func() { ... }
...
return {
add_data: function(data) {
private_data = data;
},
draw: function() {
draw_legend()
draw_plot()
}
}
}
有些人主张仅测试类的公共接口,这是有道理的,但我确实想进行一些测试以分别测试每个组件。如果我的draw_legend()函数出错,我希望测试失败的是那个测试而不是公共的draw()函数的测试。我错了吗?
我可以将每个组件都分开放在不同的类中,例如创建一个Legend类。但对于有时只有5-10行代码的东西来说,创建一个类似乎很愚蠢,并且它会变得更加丑陋,因为我需要传入大量私有状态。并且我将无法测试我的帮助函数。我应该这样做吗?我应该妥协并且仅测试公共的draw()函数吗?还是有其他解决方案?