Mongoose मॉडल का परीक्षण करना एक चुनौती हो सकती है क्योंकि आपको ऐसे परीक्षण लिखने होंगे जो आपके वास्तविक डेटाबेस में हस्तक्षेप न करें। MongoDB मेमोरी सर्वर पैकेज एक सीधा समाधान प्रदान करता है। यह आपको अपने परीक्षण डेटा को एप्लिकेशन मेमोरी में संग्रहीत करने देता है।

इस ट्यूटोरियल में, आप एक साधारण नेवला मॉडल बनाएंगे और जेस्ट और मोंगोडीबी मेमोरी सर्वर का उपयोग करके परीक्षण लिखेंगे।

MongoDB मेमोरी सर्वर क्या है?

आखिरी चीज जो आप चाहते हैं, वह है नकली डेटा को अपने वास्तविक डेटाबेस में सहेजना, जो तब हो सकता है जब आप परीक्षण के दौरान इससे जुड़ते हैं। इसके बजाय, आप अपने डेटा को संग्रहीत करने के लिए एक अलग स्थानीय MongoDB उदाहरण का उपयोग करने का विकल्प चुन सकते हैं। हालांकि यह काम करता है, यदि आपके परीक्षण क्लाउड पर चलते हैं तो यह संभव नहीं है। इसके अलावा, प्रत्येक परीक्षण के दौरान वास्तविक डेटाबेस को जोड़ना और क्वेरी करना महंगा हो सकता है।

मोंगोडीबी मेमोरी सर्वर, हालांकि, एक वास्तविक MongoDB सर्वर को स्पिन करता है और आपको परीक्षण डेटा को मेमोरी में संग्रहीत करने की अनुमति देता है। यह स्थानीय मोंगोडीबी डेटाबेस का उपयोग करने से तेज़ बनाता है क्योंकि डेटा भौतिक डिस्क पर नहीं लिखा जाता है।

instagram viewer

नेवला मॉडल बनाना

Mongoose मॉडल MongoDB डेटाबेस के साथ इंटरफेस करने के लिए एक इंटरफ़ेस प्रदान करते हैं। उन्हें बनाने के लिए, आपको उन्हें एक नेवला स्कीमा से संकलित करने की आवश्यकता है, जो आपके MongoDB डेटा मॉडल को परिभाषित करता है. यह ट्यूटोरियल एक टू-डू दस्तावेज़ के लिए एक स्कीमा का उपयोग करेगा। इसमें शीर्षक और पूर्ण फ़ील्ड शामिल होंगे।

एक नया फ़ोल्डर बनाने और उस पर नेविगेट करने के लिए टर्मिनल में निम्न कमांड चलाएँ।

mkdir नेवला-मॉडल-परीक्षण
सीडी नेवला-मॉडल-परीक्षण

निम्न आदेश के साथ npm प्रारंभ करें:

npm init -y

-यो ध्वज npm को डिफ़ॉल्ट मानों के साथ package.json फ़ाइल उत्पन्न करने का निर्देश देता है।

स्थापित करने के लिए इस आदेश को निष्पादित करें नेवला पैकेट:

NPM इंस्टॉल नेवला

नामक एक नई फ़ाइल बनाएँ todo.model.js और टूडू स्कीमा को परिभाषित करें:

स्थिरांक नेवला = ज़रूरत होना("मोंगोज़")
स्थिरांक {स्कीमा} = नेवला
स्थिरांक टोडोस्कीमा = नया स्कीमा({
वस्तु: {
प्रकार: डोरी,
आवश्यक: सच
},
पूर्ण: {
प्रकार: बूलियन,
आवश्यक: सच
}
})

इस फ़ाइल के अंत में, टूडू मॉडल बनाएं और निर्यात करें:

मापांक.निर्यात = mongoose.model("Todo", TodoSchema)

टेस्ट की योजना बनाना

परीक्षण लिखते समय, आप योजना बनाना चाहते हैं कि आप पहले से क्या परीक्षण करेंगे। यह सुनिश्चित करता है कि आप अपने मॉडल की सभी कार्यक्षमता का परीक्षण कर रहे हैं।

हमारे द्वारा बनाए गए नेवला मॉडल से, टूडू में स्ट्रिंग प्रकार का एक आइटम और बूलियन प्रकार का एक पूर्ण फ़ील्ड होना चाहिए। इन दोनों क्षेत्रों की आवश्यकता है। इसका मतलब है कि, कम से कम, हमारा परीक्षण सुनिश्चित करना चाहिए:

  • डेटाबेस में मान्य आइटम सफलतापूर्वक सहेजे जाते हैं।
  • आवश्यक फ़ील्ड के बिना आइटम सहेजे नहीं जाते हैं।
  • अमान्य प्रकार के फ़ील्ड वाले आइटम सहेजे नहीं जाते हैं।

हम इन परीक्षणों को एक परीक्षण खंड में लिखेंगे क्योंकि वे संबंधित हैं। जेस्ट में, आप इस परीक्षण ब्लॉक का उपयोग करके परिभाषित करते हैं वर्णन करना समारोह। उदाहरण के लिए:

वर्णन करना('टोडो मॉडल टेस्ट', () => {
// आपके परीक्षण यहां जाते हैं
}

डेटाबेस की स्थापना

MongoDB मेमोरी सर्वर सेट करने के लिए, आप एक नया Mongo मेमोरी सर्वर इंस्टेंस बनाएंगे और Mongoose से कनेक्ट होंगे। आप ऐसे फ़ंक्शन भी बनाएंगे जो डेटाबेस में सभी संग्रहों को छोड़ने और मोंगो मेमोरी सर्वर इंस्टेंस से डिस्कनेक्ट करने के लिए ज़िम्मेदार होंगे।

स्थापित करने के लिए निम्न आदेश चलाएँ मोंगोडब-मेमोरी-सर्वर.

NPM इंस्टॉल मोंगोडब-स्मृति-सर्वर

नामक एक नई फ़ाइल बनाएँ setuptestdb.js और नेवला और मोंगोडब-मेमोरी-सर्वर आयात करें।

स्थिरांक नेवला = ज़रूरत होना("मोंगोज़");
स्थिरांक {मोंगोमेमरीसर्वर} = ज़रूरत होना("मोंगोडब-मेमोरी-सर्वर");

इसके बाद, कनेक्टडीबी() फ़ंक्शन बनाएं। यह फ़ंक्शन एक नया Mongo मेमोरी सर्वर इंस्टेंस बनाता है और Mongoose से कनेक्ट होता है। परीक्षण डेटाबेस से कनेक्ट करने के लिए आप इसे सभी परीक्षणों से पहले चलाएंगे।

होने देना मोंगो = शून्य;

स्थिरांक कनेक्टडीबी = अतुल्यकालिक () => {
मोंगो = इंतजार MongoMemoryServer.create ();
स्थिरांक उरी = mongo.getUri ();

इंतजार mongoose.connect (यूरी, {
NewUrlParser का उपयोग करें: सच,
एकीकृत टोपोलॉजी का उपयोग करें: सच,
});
};

निम्नलिखित कोड जोड़कर एक ड्रॉपडीबी () फ़ंक्शन बनाएं। यह फ़ंक्शन डेटाबेस को छोड़ देता है, Mongoose कनेक्शन को बंद कर देता है, और Mongo मेमोरी सर्वर इंस्टेंस को रोक देता है। सभी परीक्षण समाप्त होने के बाद आप इस फ़ंक्शन को चलाएंगे।

स्थिरांक ड्रॉपडीबी = अतुल्यकालिक () => {
अगर (मोंगो) {
इंतजारनेवलाकनेक्शनड्रॉपडेटाबेस();
इंतजारनेवलाकनेक्शन।बंद करना();
इंतजार मोंगो.स्टॉप ();
}
};

आपके द्वारा बनाया गया अंतिम कार्य ड्रॉपकोलेक्शन () कहलाता है। यह सभी बनाए गए Mongoose संग्रहों को छोड़ देता है। आप इसे प्रत्येक परीक्षण के बाद चलाएंगे।

स्थिरांक ड्रॉपकोलेक्शन = अतुल्यकालिक () => {
अगर (मोंगो) {
स्थिरांक संग्रह = इंतजार mongoose.connection.db.Collections();
के लिये (होने देना संग्रह का संग्रह) {
इंतजार संग्रह.निकालें ();
}
}
};

अंत में, conenctDB (), dropDB (), और dropCollections () फ़ंक्शन निर्यात करें।

मापांक.निर्यात = {कनेक्टडीबी, ड्रॉपडीबी, ड्रॉपकोलेक्शन}

टेस्ट लिखना

जैसा कि उल्लेख किया गया है, आप परीक्षण लिखने के लिए जेस्ट का उपयोग करेंगे। जेस्ट स्थापित करने के लिए निम्न आदेश चलाएँ।

NPM इंस्टॉल हंसी

में पैकेज.जेसन फ़ाइल, जेस्ट कॉन्फ़िगर करें। अपने मौजूदा "स्क्रिप्ट्स" ब्लॉक को निम्नलिखित से बदलें:

"स्क्रिप्ट": {
"परीक्षण": "जेस्ट --runInBand --detectOpenHandles"
},
"हंसी": {
"परीक्षण का वातावरण": "नोड"
},

नामक एक नई फ़ाइल बनाएँ todo.model.test.js और नेवला पुस्तकालय, टूडू मॉडल, और conenctDB (), ड्रॉपडीबी (), और ड्रॉपकोलेक्शन () फ़ंक्शन आयात करें:

स्थिरांक नेवला = ज़रूरत होना("मोंगोज़");
स्थिरांक {कनेक्टडीबी, ड्रॉपडीबी, ड्रॉपकोलेक्शन} = ज़रूरत होना("./setupdb");
स्थिरांक टोडो = ज़रूरत होना("./todo.model");

सभी परीक्षण चलाने से पहले आपको कनेक्टडीबी() फ़ंक्शन चलाने की आवश्यकता है। जेस्ट के साथ, आप पहले से () विधि का उपयोग कर सकते हैं।

आपको सफाई कार्यों को चलाने की भी आवश्यकता है। प्रत्येक परीक्षण के बाद, सभी परीक्षणों के बाद ड्रॉपकोलेक्शन () फ़ंक्शन और ड्रॉपडीबी () फ़ंक्शन चलाएँ। आपको इसे मैन्युअल रूप से करने की आवश्यकता नहीं है और जेस्ट से afterEach () और afterAll () विधियों का उपयोग कर सकते हैं।

डेटाबेस को सेट करने और साफ़ करने के लिए todo.model.test.js फ़ाइल में निम्न कोड जोड़ें।

सबसे पहले(अतुल्यकालिक () => {
इंतजार कनेक्टडीबी ();
});

आख़िरकार(अतुल्यकालिक () => {
इंतजार ड्रॉपडीबी ();
});

एक के बाद एक(अतुल्यकालिक () => {
इंतजार ड्रॉपकोलेक्शन ();
});

अब आप परीक्षण बनाने के लिए तैयार हैं।

पहला परीक्षण जाँच करेगा कि क्या टूडू आइटम को सफलतापूर्वक डेटाबेस में डाला गया था। यह जांच करेगा कि ऑब्जेक्ट आईडी बनाए गए में मौजूद है या नहीं और उसमें डेटा आपके द्वारा डेटाबेस को भेजे गए डेटा से मेल खाता है या नहीं।

एक वर्णन ब्लॉक बनाएं और निम्न कोड जोड़ें।

वर्णन करना("टोडो मॉडल", () => {
यह("टूडू आइटम को सफलतापूर्वक बनाना चाहिए", एसिंक () => {
होने देना वैध टोडो = {
वस्तु: "बर्तन साफ़ करो",
पूरा किया हुआ: असत्य,
};
स्थिरांक न्यूटोडो = इंतजार टोडो (वैध टोडो);
इंतजार newTodo.save ();
अपेक्षा करना(नया टोडो।_पहचान)।परिभाषित किया जाना();
अपेक्षा करना(नया टोडो।वस्तु)।होना(वैधटोडो।वस्तु);
अपेक्षा करना(नया टोडो।पूरा किया हुआ)।होना(वैधटोडो।पूरा किया हुआ);
});
});

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

सामान्य उपयोग के मामले के परीक्षण के अलावा, आपको एक असफल उपयोग के मामले का भी परीक्षण करने की आवश्यकता है। हमारे द्वारा नियोजित परीक्षणों से, आपको नेवला मॉडल को एक टूडू ऑब्जेक्ट के साथ परीक्षण करने की आवश्यकता है, एक लापता आवश्यक फ़ील्ड के साथ और एक गलत प्रकार के साथ।

उसी वर्णन ब्लॉक में एक दूसरा परीक्षण जोड़ें, जो इस प्रकार है:

 यह("आवश्यक फ़ील्ड के बिना टूडू आइटम के लिए विफल होना चाहिए", एसिंक () => {
होने देना अमान्य टोडो = {
वस्तु: "बर्तन साफ़ करो",
};
प्रयत्न {
स्थिरांक न्यूटोडो = नया टोडो (अमान्य टोडो);
इंतजार newTodo.save ();
} पकड़ (गलती) {
अपेक्षा करना(गलती).toBeInstanceOf(नेवला।गलती।मान्यता त्रुटि);
अपेक्षा करना(गलती.त्रुटियां।पूरा किया हुआ)।परिभाषित किया जाना();
}
});

Todo नेवला मॉडल आइटम और पूर्ण फ़ील्ड दोनों की अपेक्षा करता है। यदि आप इन क्षेत्रों में से किसी एक के बिना टूडू को सहेजने का प्रयास करते हैं तो इसे एक त्रुटि फेंकनी चाहिए। यह परीक्षण फेंकी गई त्रुटि को पकड़ने के लिए try…catch ब्लॉक का उपयोग करता है। परीक्षण त्रुटियों को एक नेवला सत्यापन त्रुटि होने की अपेक्षा करता है और अनुपलब्ध पूर्ण फ़ील्ड से उत्पन्न होता है।

यह जांचने के लिए कि यदि आप गलत प्रकार के मानों का उपयोग करते हैं तो मॉडल त्रुटि देता है, वर्णन ब्लॉक में निम्न कोड जोड़ें।

 यह("गलत प्रकार के क्षेत्रों के साथ टूडू आइटम के लिए विफल होना चाहिए", एसिंक () => {
होने देना अमान्य टोडो = {
वस्तु: "बर्तन साफ़ करो",
पूरा किया हुआ: "असत्य"
};
प्रयत्न {
स्थिरांक न्यूटोडो = नया टोडो (अमान्य टोडो);
इंतजार newTodo.save ();
} पकड़ (गलती) {
अपेक्षा करना(गलती).toBeInstanceOf(नेवला।गलती।मान्यता त्रुटि);
अपेक्षा करना(गलती.त्रुटियां।पूरा किया हुआ)।परिभाषित किया जाना();
}
});

ध्यान दें कि पूर्ण फ़ील्ड का मान बूलियन के बजाय एक स्ट्रिंग है। परीक्षण एक सत्यापन त्रुटि को फेंकने की अपेक्षा करता है क्योंकि मॉडल एक बूलियन मान की अपेक्षा करता है।

MongoMemoryServer और Jest एक महान टीम बनाते हैं

मोंगो-मेमोरी-सर्वर एनपीएम पैकेज नेवला मॉडल के परीक्षण के लिए एक आसान समाधान प्रदान करता है। आप अपने एप्लिकेशन के डेटाबेस को छुए बिना डमी डेटा को मेमोरी में स्टोर कर सकते हैं।

मोंगोज़ मॉडल के लिए परीक्षण लिखने के लिए आप जेस्ट के साथ MongoMemoryServer का उपयोग कर सकते हैं। ध्यान दें कि यह उन सभी संभावित परीक्षणों को कवर नहीं करता है जिन्हें आप अपने मॉडल के लिए लिख सकते हैं। वे परीक्षण आपकी स्कीमा पर निर्भर करेंगे।