TypeScript पर BDD: जब कोड व्यवसाय की भाषा बोलता है
\n\nक्या आपने कभी आवश्यकताओं वाले कई पन्नों के दस्तावेज़ का अनुवाद किया है, ताकि यह पता चले कि ग्राहक का मतलब कुछ और ही था? क्या आप उस स्थिति से परिचित हैं जब डेवलपर और विश्लेषक एक ही कार्य को देखते हैं, लेकिन दो अलग-अलग एप्लिकेशन देखते हैं? यदि हाँ, तो आप BDD (Behaviour-Driven Development) के लिए तैयार हैं — एक पद्धति जो "चाहिए" और "हो गया" के बीच की सीमा को मिटा देती है।
\n\nआज हम बात करेंगे कि TypeScript पर BDD कैसे लागू करें। मैं दिखाऊंगा कि कैसे उबाऊ स्पेसिफिकेशन को जीवंत, निष्पादन योग्य परिदृश्यों में बदला जाए, जिसे मैनेजर और बैकएंड डेवलपर दोनों समझ सकें। यह सिर्फ टेस्ट के बारे में नहीं है — यह टीम की साझा भाषा के बारे में है।
\n\nवैसे, यदि आप TypeScript में अपनी यात्रा शुरू कर रहे हैं, तो मैं PythonLib नॉलेज बेस पर एक नज़र डालने की सलाह देता हूँ — वहाँ बुनियादी बातों पर बेहतरीन सामग्री है। और हम आगे बढ़ते हैं।
\n\nBDD क्या है और आपको इसकी आवश्यकता क्यों है?
\n\nBehaviour-Driven Development TDD (Test-Driven Development) का विकास है। यदि TDD इस बात पर ध्यान केंद्रित करता है कि कोड "कैसे" काम करता है (टेस्ट कार्यान्वयन से पहले लिखे जाते हैं), तो BDD इस सवाल का जवाब देता है कि सिस्टम को उपयोगकर्ता के दृष्टिकोण से "क्या" करना चाहिए।
\n\nBDD की मुख्य विशेषता Gherkin सिंटैक्स है। यह "दिया गया है — जब — तब" (Given — When — Then) संरचना है, जो इस तरह दिखती है:
\n\nकार्यक्षमता: उपयोगकर्ता प्रमाणीकरण\n एक पंजीकृत उपयोगकर्ता के रूप में\n मैं सिस्टम में लॉग इन करना चाहता हूँ\n ताकि मैं अपने व्यक्तिगत खाते तक पहुँच प्राप्त कर सकूँ\n\n परिदृश्य: सफल लॉगिन\n दिया गया है उपयोगकर्ता ईमेल "test@example.com" और पासवर्ड "123456" के साथ\n जब उपयोगकर्ता सही डेटा दर्ज करता है\n तब सिस्टम उसे व्यक्तिगत खाते में रीडायरेक्ट करता है\n\n\nक्या आप सहमत नहीं हैं कि यह "यूनिट-टेस्ट जाँचता है कि login() विधि true लौटाती है" से अधिक समझने योग्य है? यही BDD की ताकत है: TypeScript पर टेस्ट दस्तावेज़ीकरण बन जाते हैं जिसे टीम का कोई भी सदस्य पढ़ सकता है।
\n\nBDD कब लाभदायक होता है?
\n\n- \n
- जटिल व्यावसायिक तर्क — जब कोड में कई शर्तें, क्रियाओं की श्रृंखलाएँ और त्रुटि परिदृश्य हों। \n
- वितरित टीमें — मास्को में विश्लेषक, मिन्स्क में डेवलपर, नोवोसिब में परीक्षक। BDD उनकी साझा भाषा है। \n
- माइक्रोसर्विसेज — जब सेवाओं के बीच इंटरैक्शन कॉन्ट्रैक्ट को स्पष्ट रूप से परिभाषित करने की आवश्यकता हो। \n
TypeScript पर BDD के लिए उपकरण
\n\nTypeScript में BDD लागू करने के लिए हमारे पास दो मुख्य उपकरण हैं: Cucumber.js (या इसके वेरिएंट) और प्लगइन्स के साथ Jest। आइए दोनों दृष्टिकोणों को समझते हैं।
\n\nCucumber.js + TypeScript: क्लासिक तरीका
\n\nCucumber BDD का स्वर्ण मानक है। यह Gherkin फ़ाइलों (आमतौर पर .feature एक्सटेंशन के साथ) को पढ़ता है और कोड-स्टेप्स चलाता है जो आप TypeScript में लिखते हैं।
स्थापना:
\n\nnpm install --save-dev @cucumber/cucumber typescript ts-node\nnpm install --save-dev @types/node\n\n\nफ़ाइल बनाएँ features/login.feature:
कार्यक्षमता: सिस्टम में लॉगिन\n एक उपयोगकर्ता के रूप में\n मैं प्रमाणित होना चाहता हूँ\n ताकि मैं सुविधाओं तक पहुँच प्राप्त कर सकूँ\n\n परिदृश्य: सही ईमेल और पासवर्ड के साथ सफल लॉगिन\n दिया गया है मैं लॉगिन पेज खोलता हूँ\n जब मैं ईमेल "admin@test.com" दर्ज करता हूँ\n और मैं पासवर्ड "secret" दर्ज करता हूँ\n और मैं "लॉग इन" बटन दबाता हूँ\n तब मुझे स्वागत संदेश "स्वागत है, Admin!" दिखाई देता है\n\n\nअब TypeScript में स्टेप्स लिखते हैं। फ़ाइल बनाएँ features/step_definitions/login.steps.ts:
import { Given, When, Then } from '@cucumber/cucumber';\nimport { expect } from 'chai';\n\n// एप्लिकेशन स्थिति का सरल अनुकरण\nconst appState = {\n currentPage: '',\n loggedInUser: ''\n};\n\nGiven('मैं लॉगिन पेज खोलता हूँ', function () {\n appState.currentPage = 'login';\n appState.loggedInUser = '';\n});\n\nWhen('मैं ईमेल {string} दर्ज करता हूँ', function (email