はこれを考える:ユニットテスト可能なクロージャを作成するためのベストパターン?
var closure = (function() {
var some_variable;
var ret = {};
function some_internal_function() {
return some_variable;
};
function init() {
some_variable = document.getElementById("canvas");
}
ret.some_internal_function = some_internal_function;
return ret;
}());
私はユニットテストの際にモックオブジェクトにsome_variable
にできるようにしたいと思います。しかし、これは不可能と思われる。 There used to be a work around with eval()しかし、それはもはや可能ではないようです。
init()
私が望む模擬をするために関数を乗っ取らなければならないと思っていますが、それは基本的には振る舞いを指示する別の関数の実行に依存しているので、単体テストの哲学に反するようです私がテストしたいもののうちの一つ!
私は関数実行中にオプションのコンテキストで渡すコードを見てきましたが、これは内部変数のテスト/取得に関係していると想定しています。
私は、新しいノードのプロセスをフォークnode -e closure.toString()
、var some_variable = {}; //the mock object
に文字列を変更し、値(console.log(closure.some_internal_function())
)を返すメソッドを追加し、パイプ戻って結果を私のメインプロセスにとqunitでassert()
の操作を行う可能性があるとします。しかし、より良い方法が必要なときは英雄になろうとしているようです(this way> <よりも簡単なものがあれば)。
良い方法がありますか?このようなことをテストするための最良のパターンは何ですか?
上記の 'closure'変数に代入するのはクロージャではなく、オブジェクトです。そのプロパティの1つ*はクロージャ( 'some_internal_function')ですが、オブジェクトはそうではありません。しかし、興味深い質問。 –
@ T.J.Crowder、まあまあ、ちょうど疲れました。 XD – mathFromtheGroundUp