2013-02-10 11 views
17

私はコンストラクタ上にスパイを作成しようとしています。 sinon-chaiを使用しているので、構文は有効ですが、両方のテストが失敗します。JavaScriptを使用してsinonでコンストラクタを盗む

var foo = function(arg) { 
}; 

var bar = function(arg) { 
    var baz = new foo(arg); 
}; 

it('foo initialized inside of this test', function() { 
    var spy = sinon.spy(foo); 
    new foo('test'); 
    expect(spy).to.be.called; 
    expect(spy).to.be.calledWith('test'); 
}); 
it('foo initialized by bar()', function() { 
    var spy = sinon.spy(foo); 
    bar('test'); 
    expect(spy).to.be.called; 
    expect(spy).to.be.calledWith('test'); 
}); 
+0

同様の質問+ Anwser:https://stackoverflow.com/questions/32338427/spying-on-date-constructor-with-sinon?rq=1 – Gyuri

答えて

5

問題は解決はすなわちsinon.spy(namespace, 'foo')オブジェクトを使用するか、参照を自分foo = sinon.spy(foo)を上書きするかのいずれかであるのでSinonは、上のスパイするものを参照知らないことです。

+9

あなたが投稿できます修正されたテスト? – user1736947

4

あなたのコンストラクタは、お使いのブラウザで開くデベロッパーコンソールあれば、あなたのような、関連する機能/コンストラクタを使用して、オブジェクトをintantiateすることができなければならないことを意味している「窓」にバインドされて考える:

var temp = new FunctionName(); 

ので、実際の作業コードができた場合:

var jamesBond = sinon.spy(window, 'FunctionName'); 
var temp = new FunctionName(args); 

expect(jamesBond.called).to.be.equal(true); 
+1

ありがとう!長いことこれを行う方法を探していた! – ardal

関連する問題