Sinon JavaScript (Node.js) के लिए: पूरी गाइड उदाहरण सहित
1. यह क्या है और इसकी आवश्यकता क्यों है
Sinon.js एक शक्तिशाली JavaScript लाइब्रेरी है जो स्वतंत्र टेस्ट डबल्स प्रदान करती है: spies, stubs और mocks। यह किसी विशिष्ट टेस्टिंग फ्रेमवर्क (Mocha, Jest, Jasmine आदि) पर निर्भर नहीं करती और इनमें से किसी के साथ भी उपयोग की जा सकती है। Sinon का मुख्य उद्देश्य टेस्ट किए जा रहे कोड को बाहरी निर्भरताओं (डेटाबेस, API, फ़ाइल सिस्टम, टाइमर) से अलग करना है, जिससे आप नियंत्रित वातावरण में फ़ंक्शन के व्यवहार की जांच कर सकें।
इसकी आवश्यकता क्यों है? वास्तविक एप्लिकेशन में, फ़ंक्शन अक्सर अन्य फ़ंक्शन को कॉल करते हैं, बाहरी सेवाओं से संपर्क करते हैं, या एसिंक्रोनस ऑपरेशन के साथ काम करते हैं। Sinon के बिना, आप आसानी से यह जांच नहीं कर सकते कि कॉलबैक फ़ंक्शन को कॉल किया गया था या नहीं, किन आर्गुमेंट्स के साथ, कितनी बार, या सर्वर से रिस्पॉन्स को बदल नहीं सकते। Sinon इन समस्याओं को सुंदर और संक्षिप्त रूप से हल करता है, जिससे टेस्ट तेज़, विश्वसनीय और अनुमानित बनते हैं।
यह लाइब्रेरी Node.js इकोसिस्टम में विशेष रूप से लोकप्रिय है, जहाँ यूनिट टेस्टिंग बहुत महत्वपूर्ण है। यह आपको वास्तविक HTTP रिक्वेस्ट चलाए बिना, डेटाबेस से संपर्क किए बिना और टाइमर का इंतज़ार किए बिना फ़ंक्शन का परीक्षण करने की अनुमति देता है। इससे टेस्ट का निष्पादन दस गुना तेज़ हो जाता है और वे डिटरमिनिस्टिक बन जाते हैं।
2. स्थापना (Installation)
Sinon npm के माध्यम से स्थापित किया जाता है। Node.js के लिए, यह कमांड चलाएँ:
npm install sinon --save-dev
यदि आप TypeScript का उपयोग कर रहे हैं, तो टाइप्स भी स्थापित करें:
npm install sinon @types/sinon --save-dev
ब्राउज़र में उपयोग के लिए, आप CDN वर्शन को शामिल कर सकते हैं:
<script src="https://cdn.jsdelivr.net/npm/sinon@latest/pkg/sinon.js"></script>
स्थापना के बाद, अपनी टेस्ट फ़ाइल में लाइब्रेरी को इम्पोर्ट करें:
const sinon = require('sinon'); // CommonJS
// या
import sinon from 'sinon'; // ES Modules
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
एक बहुत ही सरल उदाहरण देखें: एक फ़ंक्शन जो ग्रीटिंग के साथ कॉलबैक को कॉल करता है। हम यह जांचना चाहते हैं कि कॉलबैक सही आर्गुमेंट के साथ कॉल हुआ था या नहीं।
const sinon = require('sinon');
// वह फ़ंक्शन जिसका हम परीक्षण कर रहे हैं
function greet(name, callback) {
callback(`Hello, ${name}!`);
}
// spy का उपयोग करके टेस्ट
const callbackSpy = sinon.spy();
greet('Alice', callbackSpy);
console.log(callbackSpy.calledOnce); // true
console.log(callbackSpy.calledWith('Hello, Alice!')); // true
यह उदाहरण मूल विचार को दर्शाता है: हम एक spy बनाते हैं, इसे टेस्ट किए जा रहे फ़ंक्शन में पास करते हैं, और फिर जांचते हैं कि इसे कैसे कॉल किया गया। वास्तविक टेस्ट में, आप अपने टेस्टिंग फ्रेमवर्क से assertions का उपयोग करेंगे।
4. मुख्य विधियाँ/फ़ंक्शन/क्लास
4.1. sinon.spy() — Spy (जासूस)
सिग्नेचर: sinon.spy([object], [method]) या sinon.spy([func])
यह क्या करता है: एक spy बनाता है जो फ़ंक्शन कॉल के बारे में जानकारी रिकॉर्ड करता है: कॉल की संख्या, आर्गुमेंट्स, कॉन्टेक्स्ट, रिटर्न वैल्यू। यह किसी मौजूदा फ़ंक्शन को लपेट सकता है या किसी ऑब्जेक्ट की मेथड को बदल सकता है।
उदाहरण:
const user = {
setName: function(name) { this.name = name; }
};
const spy = sinon.spy(user, 'setName');
user.setName('John');
console.log(spy.calledOnce); // true
console.log(spy.calledWith('John')); // true
console.log(spy.firstCall.args); // ['John']
spy.restore(); // मूल मेथड को पुनर्स्थापित करना न भूलें
4.2. sinon.stub() — Stub (स्टब)
सिग्नेचर: sinon.stub([object], [method])
यह क्या करता है: एक स्टब बनाता है जो फ़ंक्शन को बदल देता है और आपको इसके व्यवहार को पूर्वनिर्धारित करने की अनुमति देता है: रिटर्न वैल्यू, थ्रो किए जाने वाले अपवाद, या कॉलबैक को कॉल करना।