我有这样做模块模式:Javascript模块模式 - 如何显示所有方法?
var A = (function(x) {
var methodA = function() { ... }
var methodB = function() { ... }
var methodC = function() { ... }
...
...
return {
methA: methodA,
methB: methodB
}
})(window)
此代码让我们来找我只梅塔和methB()
上A
这是我想要什么,我喜欢什么。现在我有问题 - 我想单元测试没有痛苦至少用最小的努力。
首先我虽然我可以简单地返回this
但我错了。它返回window
对象(有人可以解释为什么?)。
二 - 我找到了解决某个地方 - 包括我的归来块中此方法:
__exec: function() {
var re = /(\(\))$/,
args = [].slice.call(arguments),
name = args.shift(),
is_method = re.test(name),
name = name.replace(re, ''),
target = eval(name);
return is_method ? target.apply(this, args) : target;
}
这种方法让我打电话给这样的方法:A.__exec('methA', arguments);
这几乎是我想要的,但相当难看。我宁愿A.test.methA()
,test
永远不会用于生产代码 - 只是为了揭示私有方法。
编辑 我看到人们告诉我测试,而不是一小部分的一件大事。让我解释。在我看来,API应该只揭示所需的方法,而不是一堆内部函数。内部因为体积小和功能有限而更容易测试,然后测试整个事情并猜测哪个部分出了问题。
虽然我可能是错的,但我仍然想看看如何从对象本身返回对所有方法的引用:)。
你不单位测试私人方法,或者你不要让他们私人。这很简单。 – mpm 2013-03-18 15:33:34
@mpm私有方法也是代码,因此它们也需要进行测试。 – 2013-03-18 15:34:16
这不是个好主意。私人方法是私人的,你不必公开它们。测试你的公共方法,他们依赖于私人测试,公众也应该覆盖这一点。 – dfsq 2013-03-18 15:35:12