多くのフレームワークでは、内部関数変数はプライベート変数として使用されます。たとえば、
Raphael = (function(){
var _private = function(a,b) {return a+b;};
var _public = function(a) {return _private(a,a);}
var object = {mult2:_public};
return object;
})();
ここではprivate
、最初の行の無名関数の内部変数であるため、グローバル名前空間から という名前の変数にアクセスできません。
この関数には、グローバル名前空間を汚染しないように、大きな Javascript フレームワークが含まれている場合があります。
一部のオブジェクトが内部で使用する単体テストを行う必要がありますRaphael
(上記の例では、 object に対して単体テストを実行したいと考えていますprivate
)。どうすればそれらをテストできますか?
編集:パブリック インターフェイスをテストすることになっている単体テストについてコメントを受け取りました。
ユースケースを指定しましょう。というライブラリを書いていますRaphael
。このライブラリは、単一の名前のみをグローバル名前空間に追加することになっています。Javascript には名前空間がないため、これは Javascript に固有の要件です。
Raphael
リンクされたリストを使用するとしましょう。Javascriptにパッケージの概念があれば、私はそうするでしょう
require 'linked_list'
Raphael = (function(){/* use linked list */})();
ただし、Javascript では、リンクされたリスト オブジェクトでグローバル スコープを汚染しないような方法でそれを行うことはできません! したがって、linked_list
Raphael のローカル スコープにインライン化する必要があります。
Raphael = (function(){
/* implement linked list */
var linked_list = function(){/*implementation*/};
})();
linked_list
そして今、実装をテストしたいと思います。