2015-02-09 6 views
6

का उपयोग करके कक्षा वर्ग को मॉक करें मैं साइनऑन के साथ नोड मॉड्यूल मॉकरी का उपयोग करके यूनिट परीक्षण सीख रहा हूं।नकली और साइनऑन

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

वर्ग मैं उपहास करने के लिए कोशिश कर रहा हूँ:

function LdapAuth(options) {} 

// The function that I want to mock. 
LdapAuth.prototype.authenticate = function (username, password, callback) {} 

और यहाँ कोड मैं वर्तमान में मेरे beforeEach() फ़ंक्शन में उपयोग कर रहा हूँ है:

beforeEach(function() { 
     ldapAuthMock = sinon.stub(LdapAuth.prototype, "authenticate", function(username, password, callback) {}); 
     mockery.registerMock('ldapauth-fork', ldapAuthMock); 
     mockery.enable(); 
    }); 

    afterEach(function() { 
     ldapAuthMock.restore(); 
     mockery.disable(); 
    }); 

मैं उपहास करने के लिए कोशिश की है/बिना सफलता के विभिन्न तरीकों से LdapAuth कक्षा को दबाएं और उपरोक्त कोड केवल नवीनतम संस्करण है जो काम नहीं करता है।

तो मैं सिर्फ यह जानना चाहता हूं कि इसे सफलतापूर्वक साइनऑन और मॉकरी का उपयोग करके कैसे मॉक करना है।

उत्तर

9

ये नोड मॉकिंग लाइब्रेरी नोड के मॉड्यूल कैश, जावास्क्रिप्ट की गतिशील प्रकृति और इसकी प्रोटोटाइपिक विरासत के कारण काफी बोझिल हो सकती है।

सौभाग्य से सीनॉन उस वस्तु को संशोधित करने का भी ख्याल रखता है जिसे आप नकली करने की कोशिश कर रहे हैं और साथ ही स्पि, सब और मैक्स बनाने के लिए एक अच्छा एपीआई प्रदान करते हैं।

// ldap-auth.js 

function LdapAuth(options) { 
} 

LdapAuth.prototype.authenticate = function (username, password, callback) { 
    callback(null, 'original'); 
} 

module.exports = LdapAuth; 
// test.js 

var sinon = require('sinon'); 
var assert = require('assert'); 
var LdapAuth = require('./ldap-auth'); 

describe('LdapAuth#authenticate(..)', function() { 
    beforeEach(function() { 
    this.authenticateStub = sinon 
           // Replace the authenticate function 
           .stub(LdapAuth.prototype, 'authenticate') 
           // Make it invoke the callback with (null, 'stub') 
           .yields(null, 'stub'); 
    }); 

    it('should invoke the stubbed function', function (done) { 
    var ldap = new LdapAuth(); 
    ldap.authenticate('user', 'pass', function (error, value) { 
     assert.ifError(error); 
     // Make sure the "returned" value is from our stub function 
     assert.equal(value, 'stub'); 
     // Call done because we are testing an asynchronous function 
     done(); 
    }); 
    // You can also use some of Sinon's functions to verify that the stub was in fact invoked 
    assert(this.authenticateStub.calledWith('user', 'pass')); 
    }); 

    afterEach(function() { 
    this.authenticateStub.restore(); 
    }); 
}); 

मुझे आशा है कि इस मदद करता है:

यहाँ कैसे मैं authenticate विधि ठूंठ हैं का एक छोटा सा उदाहरण है।

+1

क्या होगा यदि आप निर्माता को स्टब करना चाहते हैं? –

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