我有這樣做模塊模式: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