私は次のようにモジュールパターンを作成しました:
var A = (function(x) {
var methodA = function() { ... }
var methodB = function() { ... }
var methodC = function() { ... }
...
...
return {
methA: methodA,
methB: methodB
}
})(window)
このコードでは、methAのみを呼び出しますmethB()
。A
これは、私が欲しいものであり、好きなものです。今私が抱えている問題-少なくとも最小限の労力で、痛みを伴わずに単体テストを行いたいと思います。
最初は簡単に戻ることthis
ができますが、間違っていました。オブジェクトを返しwindow
ます(誰かが理由を説明できますか?)。
2番目-オンラインのどこかで解決策を見つけました-このメソッドをリターンブロック内に含めるには:
__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は、一連の内部関数ではなく、必要なメソッドのみを明らかにする必要があります。サイズが小さく機能が制限されているため、内部はテストがはるかに簡単で、全体をテストして、どの部分が間違っているかを推測できます。
私は間違っているかもしれませんが、オブジェクト自体からすべてのメソッドへの参照を返す方法を確認したいと思います:)。