यूनिट परीक्षण कोड से संबंधित कुछ SO उत्तर हैं जो डेटा स्टोर के रूप में MongoDB का उपयोग करते हैं:
- नोड.जेएस में डेटाबेस का मजाक उड़ाया जा रहा है?
- मॉक/टेस्ट Mongodb डेटाबेस Node.js
- एकीकरण परीक्षण चलाते समय एंबेडेड MongoDB
- इसी तरह:यूनिट परीक्षण कक्षाएं जिनमें ऑनलाइन कार्यक्षमता है
मैं इन समाधानों को समेकित करने का प्रयास करूँगा।
प्रस्तावना
सबसे पहले और सबसे महत्वपूर्ण, आपको चाहिए अपने परीक्षण करते समय मोंगोडीबी चलाना चाहते हैं। MongoDB की क्वेरी भाषा जटिल है, इसलिए यह सुनिश्चित करने के लिए कि आपके प्रश्न योजना के अनुसार चल रहे हैं और आपका एप्लिकेशन परिणामों के लिए ठीक से प्रतिक्रिया दे रहा है, एक स्थिर MongoDB उदाहरण के विरुद्ध वैध प्रश्नों को चलाना आवश्यक है। हालांकि, इसे ध्यान में रखते हुए, आपको कभी नहीं एक उत्पादन प्रणाली के खिलाफ अपने परीक्षण चलाएं, लेकिन इसके बजाय आपके एकीकरण पर्यावरण के लिए एक परिधीय प्रणाली। यह आपके सीआई सॉफ़्टवेयर के समान मशीन पर हो सकता है, या बस इसके अपेक्षाकृत करीब (प्रक्रिया के संदर्भ में, जरूरी नहीं कि नेटवर्क या भौगोलिक रूप से बोल रहा हो)।
यह ईएनवी लो-फुटप्रिंट हो सकता है और पूरी तरह से मेमोरी (संसाधन 1) (संसाधन 2) में चलाया जा सकता है, लेकिन जरूरी नहीं कि आपके उत्पादन ईएनवी के समान प्रदर्शन विशेषताओं की आवश्यकता हो। (यदि आप प्रदर्शन परीक्षण करना चाहते हैं, तो इसे वैसे भी आपके सीआई से अलग वातावरण में संभाला जाना चाहिए।)
सेटअप
- एक
mongod
स्थापित करें विशेष रूप से सीआई के लिए सेवा। यदि प्रतिकृति सेट और/या शार्डिंग चिंता का विषय है (उदाहरण के लिए चिंता लिखें,$isolated
का कोई उपयोग नहीं है , आदि), कईmongod
. चलाकर एक संकुल वातावरण की नकल करना संभव है उदाहरण (1 कॉन्फ़िगरेशन, shard+repl के लिए 2x2 डेटा) और एकmongos
उदाहरण एक ही मशीन पर या तो कुछ init.d स्क्रिप्ट/ट्वीक्स या docker जैसी किसी चीज़ के साथ। - पर्यावरण-विशिष्ट कॉन्फ़िगरेशन का उपयोग करें आपके एप्लिकेशन के भीतर (या तो .json फ़ाइलों के माध्यम से एम्बेड किया गया है, या किसी जगह जैसे /etc, /home/user/.your-app या इसी तरह)। आपका एप्लिकेशन इन्हें एक नोड पर्यावरण चर के आधार पर लोड कर सकता है जैसे
NODE_ENV=int
. इन विन्यासों के भीतर आपके डीबी कनेक्शन तार अलग होंगे। अगर आप नहीं हैं एनवी-विशिष्ट कॉन्फ़िगरेशन का उपयोग करके, एप्लिकेशन रनटाइम सेटिंग्स (यानी "स्थानीय", "देव", "इंट", "प्री", "प्रोड", आदि) को सार करने के साधन के रूप में ऐसा करना शुरू करें। अनुरोध पर मैं एक नमूना प्रदान कर सकता हूं। - अपने एप्लिकेशन/परीक्षण सूट के साथ परीक्षण-उन्मुख जुड़नार शामिल करें। जैसा कि लिंक किए गए प्रश्नों में से एक में बताया गया है, MongoDB का Node.js ड्राइवर कुछ सहायक पुस्तकालयों का समर्थन करता है:
mongodb-fixtures
औरnode-database-cleaner
. फिक्स्चर परीक्षण के लिए एक कार्यशील और सुसंगत डेटा सेट प्रदान करते हैं:उन्हें एक बूटस्ट्रैप के रूप में सोचें।
बिल्ड/टेस्ट
- संबंधित डेटाबेस को
node-database-cleaner
. जैसी किसी चीज़ का उपयोग करके साफ़ करें । mongodb-fixtures
की सहायता से अपने फिक्स्चर को अब खाली डेटाबेस में भर दें ।- अपना निर्माण और परीक्षण करें।
- दोहराएं।
दूसरी ओर...
अगर आप अब भी यह तय करते हैं कि नहीं मोंगोडीबी चलाना सही दृष्टिकोण है (और आप अकेले नहीं होंगे), फिर ओआरएम के साथ ड्राइवर से अपने डेटा स्टोर कॉल को सारणित करना आपकी सबसे अच्छी शर्त है (पूरे एप्लिकेशन के लिए, न केवल परीक्षण)। उदाहरण के लिए, model
. जैसा कुछ डेटाबेस अज्ञेयवादी होने का दावा करता है, हालाँकि मैंने कभी इसका उपयोग नहीं किया है। इस दृष्टिकोण का उपयोग करते हुए, आपको अभी भी फिक्स्चर . की आवश्यकता होगी और env कॉन्फ़िगरेशन , हालांकि आपको MongoDB स्थापित करने की आवश्यकता नहीं होगी। यहां चेतावनी यह है कि आप अपने द्वारा चुने गए ओआरएम की दया पर हैं।