पहले, मैं अपनी कक्षा परिभाषा थोड़ा संशोधित (अपरकेस वर्ग के नाम और डाटाबेस काम ठीक) चाहते हैं:
var WrapperStub = sinon.spy(function() {
return sinon.createStubInstance(Wrapper);
});
sinon.createStubInstance
एक उदाहरण बना देगा:
var Wrapper = (function() {
function Wrapper() {
this.db = require("database");
}
Wrapper.prototype.insertUser = function(doc) {
return this.db.query("INSERT INTO USERS...");
};
return Wrapper;
})();
पूरी कक्षा ठूंठ रैपर का जहां हर विधि एक स्टब है। sinon.spy
हमें क्लास इंस्टेंटेशन की जासूसी करने की अनुमति देगा।
तो आप इसे इस प्रकार का प्रयोग कर सकते हैं:
// verify instantiation
var wrapper = new WrapperStub();
expect(WrapperStub).to.have.been.calledWithNew;
// verify method stub
wrapper.insertUser.returns('data');
expect(wrapper.insertUser()).to.equal('data');
expect(wrapper.insertUser).to.have.been.calledOnce;
(कथनों chai और sinon-chai का उपयोग करें) मैंने कहा कि बस "यह व्यायाम" क्योंकि इस कोड स्निपेट एक वास्तविक इकाई परीक्षण नहीं है। इंस्टेंटेशन और विधि कॉल आपके विषय द्वारा परीक्षण के तहत किए जाएंगे।
अब, आप किसी निर्भरता द्वारा इंजेक्शन नकली करना चाहते हैं की आवश्यकता होती है() -such अपने उदाहरण में db = require('database')
के रूप में, आप या तो Jest (लेकिन उपयोग नहीं कर सिनोन) की तरह एक परीक्षण उपकरण या sinonquire जो मैं से प्रेरित बनाया की कोशिश कर सकते जेस्ट लेकिन इसे साइनऑन के साथ अपने पसंदीदा परीक्षण उपकरण (मेरा मोचा) के साथ उपयोग करने के लिए है। आंतरिक रूप से, sinonquire कक्षा को स्टब करने के लिए sinon.spy
और sinon.createStubInstance
के संयोजन के ऊपर दिखाए गए एक ही तकनीक का उपयोग करता है।
स्रोत
2015-10-28 04:53:37
ओह। तो 'insertUser'' कॉल के बजाय 'insertUser' विधि को स्टब करना बेहतर होगा जो 'insertUser' करता है? – Industrial
आप जो परीक्षण कर रहे हैं उस पर निर्भर करता है, लेकिन यदि आप परीक्षण करना चाहते हैं कि डीबी में डालने वाला यूज़र डालने वाला है तो यह एकीकरण परीक्षण होगा और कोई स्टबिंग आपको वास्तविक तर्क का उपयोग करने से बचाएगा, कुछ मेमोरी डीबी में "नकली" ओरेकल उदाहरण के लिए, यदि आप परीक्षण करना चाहते हैं कि यदि आवश्यक हो तो insertUser को कॉल किया जाता है तो insertUser विधि को दबाकर इसे करने का एक तरीका हो सकता है ... –