जावास्क्रिप्ट में मॉक ऑब्जेक्ट और फिक्स्चर: टेस्ट में पागल कैसे न हों

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावास्क्रिप्ट में मॉक ऑब्जेक्ट और फिक्स्चर: आपका टेस्ट शस्त्रागार

\n\n

कल्पना करें कि आप एक मॉड्यूल लिख रहे हैं जो बाहरी मौसम API को अनुरोध भेजता है। आप टेस्ट चलाते हैं - और वे विफल हो जाते हैं, क्योंकि API अस्थायी रूप से अनुपलब्ध है। या इससे भी बुरा: आप भुगतान प्रणाली का परीक्षण कर रहे हैं, और हर रन कार्ड से वास्तविक पैसे काट लेता है। परिचित लग रहा है? उस दुनिया में आपका स्वागत है जहां जावास्क्रिप्ट में मॉक ऑब्जेक्ट और फिक्स्चर आपके सबसे अच्छे दोस्त बन जाते हैं।

\n\n

इस लेख में हम केवल परिभाषाएँ सूचीबद्ध नहीं करेंगे। हम यह समझेंगे कि कैसे मॉक, स्टब और फिक्स्चर की मदद से टेस्ट को तेज़, विश्वसनीय और बाहरी दुनिया से स्वतंत्र बनाया जाए। आप सीखेंगे कि टाइमर को कैसे धोखा दें, HTTP अनुरोधों को कैसे बदलें और आदर्श टेस्ट डेटा कैसे तैयार करें। चलिए शुरू करते हैं!

\n\n

मॉक और फिक्स्चर की आवश्यकता क्यों है? दर्द और मुक्ति

\n\n

जब आप जावास्क्रिप्ट में यूनिट-टेस्ट लिखते हैं, तो आप केवल एक मॉड्यूल की जाँच करना चाहते हैं। लेकिन वास्तविक कोड अक्सर डेटाबेस, फ़ाइल सिस्टम, नेटवर्क कॉल या यादृच्छिक संख्याओं पर निर्भर करता है। मॉक के बिना, हर टेस्ट एक लॉटरी है: यह नेटवर्क टाइम-आउट या सर्वर द्वारा गलत डेटा लौटाने के कारण विफल हो सकता है।

\n\n

मॉक ऑब्जेक्ट वास्तविक निर्भरताओं के विकल्प हैं। वे मूल ऑब्जेक्ट के व्यवहार का अनुकरण करते हैं, लेकिन आप उनके उत्तरों पर पूर्ण नियंत्रण रखते हैं। फिक्स्चर पूर्व-तैयार डेटा सेट होते हैं (जैसे, API प्रतिक्रिया के साथ JSON), जिन्हें आप टेस्ट में डालते हैं। साथ में वे एक महाशक्ति देते हैं: आप बुनियादी ढांचे के बजाय तर्क का परीक्षण करते हैं।

\n\n

Mock vs Stub vs Spy: शब्दों को समझना

\n\n

कोड लिखने से पहले, आइए शब्दों में व्यवस्था करें। जावास्क्रिप्ट इकोसिस्टम (विशेष रूप से Jest और Mocha) में, इन अवधारणाओं को कभी-कभी मिला दिया जाता है, लेकिन अंतर महत्वपूर्ण हैं:

\n\n
    \n
  • Mock (मॉक) — एक ऑब्जेक्ट जो वास्तविक निर्भरता को बदलता है और अपेक्षित व्यवहार सेट करने की अनुमति देता है। आप कहते हैं: "जब id=5 के साथ getUser विधि को कॉल किया जाए, तो ऑब्जेक्ट {name: 'Alice'} लौटाएं"।
  • \n
  • Stub (स्टब) — मॉक का एक सरलीकृत संस्करण। यह केवल निश्चित डेटा लौटाता है, यह जाँच नहीं करता कि इसे कैसे कॉल किया गया। इसका उपयोग अक्सर उन फंक्शन को बदलने के लिए किया जाता है जो यादृच्छिक मान लौटाते हैं।
  • \n
  • Spy (स्पाई) — वास्तविक फंक्शन के ऊपर एक आवरण। यह इसके व्यवहार को नहीं बदलता, लेकिन रिकॉर्ड करता है कि इसे कितनी बार कॉल किया गया, किन तर्कों के साथ और इसने क्या लौटाया। साइड इफेक्ट्स की जाँच के लिए आदर्श।
  • \n
\n\n

अधिकांश आधुनिक फ्रेमवर्क (Jest, Sinon.js) में, मॉक सब कुछ कर सकते हैं: कार्यान्वयन को बदलना और जासूसी करना। लेकिन अंतर को समझने से अधिक सार्थक टेस्ट लिखने में मदद मिलेगी।

\n\n

फिक्स्चर: टेस्ट डेटा कैसे तैयार करें

\n\n

जावास्क्रिप्ट टेस्ट में फिक्स्चर केवल डेटा हैं जिन्हें आप अलग फ़ाइलों या वेरिएबल्स में रखते हैं। इसकी आवश्यकता क्यों है? पहला, हर टेस्ट में 50-लाइन JSON ऑब्जेक्ट को डुप्लिकेट न करने के लिए। दूसरा, परिदृश्यों को जल्दी से बदलने के लिए: एक फिक्स्चर सफल प्रतिक्रिया के लिए, दूसरा त्रुटि के लिए।

\n\n

उपयोगकर्ताओं के साथ काम करने वाले मॉड्यूल के परीक्षण के लिए एक सरल फिक्स्चर का उदाहरण:

\n\n
// fixtures/users.js\nexport const userAlice = {\n  id: 1,\n  name: 'Alice',\n  email: 'alice@example.com',\n  role: 'admin'\n};\n\nexport const userBob = {\n  id: 2,\n  name: 'Bob',\n  email: 'bob@example.com',\n  role: 'user'\n};\n\nexport const apiResponseSuccess = {\n  status: 200,\n  data: { users: [userAlice, userBob] }\n};\n\nexport const apiResponseError = {\n  status: 500,\n  message: 'Internal Server Error'\n};\n
\n\n

अब टेस्ट में हम बस इन ऑब्जेक्ट को इम्पोर्ट करते हैं। यह कोड को साफ बनाता है और मामलों को आसानी से पुन: पेश करने की अनुमति देता है: "क्या होगा अगर सर्वर ने 500 लौटाया?"

\n\n

Jest में Mock: व्यावहारिक उदाहरण

\n\n

Jest जावास्क्रिप्ट के लिए सबसे लोकप्रिय टेस्ट फ्रेमवर्क है। यह Create React App, Next.js और कई अन्य टूल्स में बनाया गया है। आइए देखें कि Jest में मॉक ऑब्जेक्ट कैसे बनाएं।

\n\n

jest.fn() के साथ Mock फंक्शन

\n\n

मान लीजिए, हमारे पास एक फंक्शन है जो डेटा प्रोसेसिंग के बाद कॉलबैक को कॉल करता है।

ब्लॉग

पुस्तक अनुशंसाएँ