2013-02-10 12 views
17

के साथ जावास्क्रिप्ट में एक कन्स्ट्रक्टर पर जासूसी मैं एक कन्स्ट्रक्टर पर एक जासूस बनाने की कोशिश कर रहा हूं, और देख सकता हूं कि इसे कॉल किया जाता है - नीचे मेरे परीक्षण हैं। मैं साइनऑन-चाई का उपयोग कर रहा हूं इसलिए वाक्यविन्यास मान्य है, लेकिन दोनों परीक्षण विफल हो जाते हैं।साइनऑन

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) ओवरराइड करने के लिए है।

var temp = new FunctionName(); 

:

+9

आप पोस्ट कर सकते हैं सही परीक्षण? – user1736947

4

अपने निर्माता को ध्यान में रखते 'विंडो' जिसका मतलब है कि अगर आप अपने ब्राउज़र पर खुला डेवलपर कंसोल, आप इस तरह के रूप में संबंधित समारोह/निर्माता का उपयोग करके एक वस्तु intantiate में सक्षम होना चाहिए के लिए बाध्य है ताकि वास्तविक काम कर कोड हो सकता है:

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

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

धन्यवाद! लंबे समय तक ऐसा करने के लिए एक रास्ता तलाश रहे थे! – ardal

संबंधित मुद्दे