$()
は、val()
というメソッドでオブジェクトを返す関数です。したがって、メソッドvalを持つスタブ付きオブジェクトを返すために$()をスタブする必要があります。
$ = sinon.stub();
$.withArgs('#category').returns(sinon.stub({val: function(){}}));
しかし、ここでの主な誤りは、テストするコードに関数$()を呼び出して新しいインスタンスを作成させることです。どうして?クラスに新しいインスタンスを作成せず、コンストラクタに渡すのがベストプラクティスです。あなたはそれを倍に、入力のうちの値を取得し、戻って別のことを書きます機能を持っているとしましょう。この場合
function doubleIt(){
$('#el2').val(('#el1').val() *2);
}
あなたが$()
を呼び出すことによって、2つの新しいオブジェクトを作成します。今度はモックとスタブを返すためにスタブして$()
する必要があります。あなたはスタブを返すために$をスタブする必要が最初のケースでは、第2のケースでは、あなたが簡単にあなたの関数にスタブとスパイを渡すことができ、一方で
function doubleIt(el1, el2){
el2.val(el1.val() *2);
}
:あなたはこれを避けることができ、次の例を使用します。
だから、1秒間sinonテストは、次のようになります。
var el1 = sinon.stub({val: function(){}});
el1.returns(2);
var el2 = sinon.spy({val: function(){}}, 'val')
doubleIt(el1, el2)
assert(el2.withArgs(4).calledOnce)
をので、あなたはここにはDOM要素を持っていないとして、あなたは、単に同じDOMを作成する必要はありませんし、アプリケーションのロジックをテストすることができますあなたのアプリで。
私はこれらのライブラリを使用していませんが、 '$'は実際にはオブジェクトです(関数はJavaScriptのオブジェクトです)。それ以外に、jQuery関数は何も選択されていないときに機能します。 '.val()'は単に 'undefined'を返します。 – pimvdb
'.val()'は 'undefined'を返しますが、どうすれば' === '' 'をテストすることができますか? – swilliams