परीक्षण, जबकि यह समय लेने वाला हो सकता है, किसी भी अनुप्रयोग के विकास चक्र में एक महत्वपूर्ण कदम है। यह सुनिश्चित करता है कि आप कोड को उत्पादन में धकेलने से पहले बग और मुद्दों को जल्दी पकड़ लें।
एक्सप्रेस रेस्ट एपीआई का परीक्षण करने के लिए आप जेस्ट का उपयोग कर सकते हैं। एक साधारण सीआरयूडी एपीआई बनाने के बाद, प्रत्येक समापन बिंदु के लिए परीक्षण लिखने का तरीका जानें।
जेस्ट क्या है?
कई जावास्क्रिप्ट परीक्षण पुस्तकालय हैं जिन्हें आप चुन सकते हैं, लेकिन हंसी शुरू करना सबसे आसान है। यह फेसबुक द्वारा विकसित एक परीक्षण पुस्तकालय है, जिसका उपयोग ज्यादातर रिएक्ट परियोजनाओं का परीक्षण करने के लिए किया जाता है। हालाँकि, आप इसका उपयोग नोड और अन्य जावास्क्रिप्ट-आधारित परियोजनाओं का परीक्षण करने के लिए भी कर सकते हैं। यह एक अन्य परीक्षण उपकरण, जैस्मीन के शीर्ष पर विकसित किया गया था, और अपने स्वयं के अभिकथन पुस्तकालय के साथ आता है।
जबकि आपको जेस्ट में परीक्षण लिखने के लिए एक अभिकथन पुस्तकालय की आवश्यकता नहीं होगी, आपको HTTP अनुरोध करने के लिए एक उपकरण का उपयोग करने की आवश्यकता होगी। यह लेख सुपरटेस्ट का उपयोग करता है।
सुपरटेस्ट क्या है?
सुपरटेस्ट HTTP कॉल के लिए एक नोड परीक्षण पुस्तकालय है। यह सुपरएजेंट परीक्षण पुस्तकालय का विस्तार करता है और आपको GET, POST, PUT, और DELETE जैसे अनुरोध करने की अनुमति देता है।
सुपरटेस्ट एक अनुरोध वस्तु प्रदान करता है जिसका उपयोग आप HTTP अनुरोध करने के लिए कर सकते हैं।
स्थिरांक अनुरोध = ज़रूरत होना("सुपरटेस्ट")
अनुरोध("https://icanhazdadjoke.com")
।प्राप्त('/slack')
।समाप्त(समारोह(गलती, फिर से) {
यदि (गलती) फेंकना गलती;
सांत्वना देना।लकड़ी का लट्ठा(रेस।तनसंलग्नक);
});
यहां, आप एपीआई के आधार यूआरएल को अनुरोध ऑब्जेक्ट में पास करते हैं और फिर बाकी यूआरएल के साथ HTTP विधि को श्रृंखलाबद्ध करते हैं। समाप्त() विधि एपीआई सर्वर को कॉल करती है और कॉलबैक फ़ंक्शन इसकी प्रतिक्रिया को संभालता है।
एक बार जब आप एपीआई से प्रतिक्रिया प्राप्त कर लेते हैं, तो आप इसे सत्यापित करने के लिए जेस्ट का उपयोग कर सकते हैं।
एक एक्सप्रेस एपीआई बनाएं
अपने स्वयं के API समापन बिंदुओं का परीक्षण करने के लिए, आपको बनाने की आवश्यकता है एक आरईएसटी एपीआई पहला। आप जो एपीआई बनाएंगे वह काफी सरल है। यह एक सरणी से आइटम सम्मिलित करता है, पुनर्प्राप्त करता है, अद्यतन करता है और हटाता है।
नोड-जेस्ट नामक एक नई निर्देशिका बनाकर और npm को प्रारंभ करके प्रारंभ करें।
mkdir नोड-जेस्ट
npm init -y
इसके बाद, एक नई फाइल बनाएं जिसका नाम है index.js तथा एक्सप्रेस सर्वर बनाएं.
स्थिरांक एक्सप्रेस = ज़रूरत होना("अभिव्यक्त करना")
स्थिरांक ऐप = एक्सप्रेस ()
ऐप.सुनो (3000, () => कंसोल.लॉग("पोर्ट 3000. पर सुन रहा हूँ"))
GET /todos समापन बिंदु का परीक्षण करें
आपके द्वारा बनाया गया पहला समापन बिंदु GET /todos समापन बिंदु है। यह सरणी में सभी आइटम लौटाता है। index.js में, निम्नलिखित जोड़ें।
स्थिरांक टोडोस = [
];
// सभी todos प्राप्त करें
app.get("/todos", (req, res) => {
वापसीरेस।दर्जा(200).json({
डेटा: टूडोस,
गलती: शून्य,
});
});
ध्यान दें कि प्रतिक्रिया में 200 का एक स्टेटस कोड और एक JSON ऑब्जेक्ट होता है जिसमें डेटा नामक एक सरणी में टू-डॉस आइटम होता है और एक त्रुटि संदेश होता है। यही वह है जिसे आप जेस्ट का उपयोग करके परीक्षण करेंगे।
अब, जेस्ट और सुपरटेस्ट स्थापित करें:
NPM इंस्टॉल जेस्ट सुपरटेस्ट
फिर, में एक परीक्षण स्क्रिप्ट जोड़ें पैकेज.जेसन निम्नलिखित नुसार:
{
"स्क्रिप्ट": {
"परीक्षण": "हंसी"
}
}
इससे पहले कि आप अपने स्वयं के परीक्षण लिखना शुरू करें, आपको यह समझना चाहिए कि जेस्ट में एक बुनियादी परीक्षा कैसे लिखी जाती है।
निम्नलिखित फ़ंक्शन पर विचार करें:
समारोहजोड़(ए, बी) {
वापसी ए + बी;
}
मापांक.निर्यात = योग;
परीक्षण फ़ाइल में, आपको यह करना होगा:
- फ़ंक्शन आयात करें।
- वर्णन करें कि परीक्षण क्या करना चाहिए।
- फ़ंक्शन को कॉल करें।
- फ़ंक्शन से वास्तविक प्रतिक्रिया के साथ अपेक्षित प्रतिक्रिया दें।
स्थिरांक {योग} = ज़रूरत होना("।/जोड़")
वर्णन करना("दो वस्तुओं का योग", एसिंक () => {
परीक्षण("इसे 4. वापस करना चाहिए", () => {
अपेक्षा करना(जोड़(2,2))।होना(4)
})
})
वर्णन करना कीवर्ड परीक्षणों के समूह को निर्दिष्ट करता है और परीक्षण कथन विशिष्ट परीक्षण निर्दिष्ट करता है। यदि फ़ंक्शन से लौटाया गया मान पास किए गए मान से मेल खाता है होना, परीक्षा पास हो जाती है।
एपीआई एंडपॉइंट का परीक्षण करते समय, आप एक फ़ंक्शन को कॉल नहीं करेंगे बल्कि सुपरटेस्ट या किसी अन्य HTTP क्लाइंट लाइब्रेरी का उपयोग करके एक अनुरोध भेजेंगे।
GET समापन बिंदु पर लौटकर, एक नई फ़ाइल बनाएँ, जिसका नाम है api.test.js. यह वह जगह है जहाँ आप सभी समापन बिंदु परीक्षण लिखेंगे। परीक्षण फ़ाइल का नामकरण a ।परीक्षण इंफिक्स सुनिश्चित करता है कि जेस्ट इसे एक परीक्षण फ़ाइल के रूप में पहचानता है।
api.test.js में, सुपरटेस्ट आयात करें और आधार URL को इस प्रकार सेट करें:
स्थिरांक अनुरोध = ज़रूरत होना("सुपरटेस्ट")
स्थिरांक बेसयूआरएल = "http:// लोकलहोस्ट: 3000"
इसके बाद, वर्णन ब्लॉक में पहला परीक्षण बनाएं:
वर्णन करना("प्राप्त / todos", () => {
स्थिरांक न्यूटोडो = {
पहचान: क्रिप्टो.randomUUID(),
वस्तु: "पानी प",
पूरा किया हुआ: असत्य,
}
सबसे पहले(अतुल्यकालिक () => {
// टूडू सेट करें
प्रतीक्षा अनुरोध (बेसयूआरएल)। पोस्ट ("/todo") भेजें (नया टोडो);
})
आख़िरकार(अतुल्यकालिक () => {
इंतजार अनुरोध (बेसयूआरएल)। हटाएं (`/ टूडू /${newTodo.id}`)
})
यह("200. वापस करना चाहिए", एसिंक () => {
स्थिरांक प्रतिक्रिया = इंतजार अनुरोध (बेसयूआरएल)। प्राप्त करें ("/todos");
अपेक्षा करना(जवाब।स्थिति का कोड)।होना(200);
अपेक्षा करना(जवाब।तन।गलती)।होना(शून्य);
});
यह("वापस आ जाना चाहिए", एसिंक () => {
स्थिरांक प्रतिक्रिया = इंतजार अनुरोध (बेसयूआरएल)। प्राप्त करें ("/todos");
उम्मीद (response.body.data.length >= 1)।होना(सच);
});
});
परीक्षण चलाने से पहले, आपको सेटअप और टियरडाउन फ़ंक्शन को परिभाषित करने की आवश्यकता होगी। ये फ़ंक्शन परीक्षण से पहले एक आइटम के साथ टूडू सरणी को पॉप्युलेट करेंगे और प्रत्येक परीक्षण के बाद डमी डेटा को हटा देंगे।
सभी परीक्षणों से पहले चलने वाला कोड पहले वाले () फ़ंक्शन में है। सभी परीक्षणों के बाद चलने वाला कोड afterAll () फ़ंक्शन में है।
इस उदाहरण में, आप बस पोस्ट को हिट कर रहे हैं और प्रत्येक के लिए एंडपॉइंट हटा रहे हैं। एक वास्तविक एप्लिकेशन में, आप शायद परीक्षण डेटा वाले नकली डेटाबेस से कनेक्ट होंगे।
इस परीक्षण में, आपने पहले GET /todos समापन बिंदु के लिए एक अनुरोध किया और अपेक्षित परिणामों के लिए वापस भेजी गई प्रतिक्रिया की तुलना की। यह परीक्षण सूट पास होगा यदि प्रतिक्रिया में एक HTTP स्थिति कोड 200 का, डेटा खाली नहीं है, और त्रुटि संदेश शून्य है।
पोस्ट / टूडू एंडपॉइंट का परीक्षण करें
index.js में, POST /todo समापन बिंदु बनाएँ:
ऐप.पोस्ट("/todo", (req, res) => {
प्रयत्न {
स्थिरांक {आईडी, आइटम, पूर्ण} = req.body;
स्थिरांक न्यूटोडो = {
पहचान,
वस्तु,
पूरा किया हुआ,
};
सब।धकेलना(नया टोडो);
वापसीरेस।दर्जा(201).json({
डेटा: टूडोस,
गलती: शून्य,
});
} पकड़ (गलती) {
वापसीरेस।दर्जा(500).json({
जानकारी: शून्य,
त्रुटि: त्रुटि,
});
}
});
इस परीक्षण में, आपको सेंड () विधि का उपयोग करके अनुरोध निकाय में टूडू विवरण भेजने की आवश्यकता होगी।
अनुरोध (बेसयूआरएल)। पोस्ट ("/todo") भेजें (नया टोडो)
POST /todo अनुरोध को 201 स्थिति कोड और todos सरणी को अंत में जोड़े गए नए आइटम के साथ वापस करना चाहिए। यहाँ परीक्षण कैसा दिख सकता है:
वर्णन करना("पोस्ट / टूडू", () => {
स्थिरांक न्यूटोडो = {
// करने के लिए
}
आख़िरकार(अतुल्यकालिक () => {
इंतजार अनुरोध (बेसयूआरएल)। हटाएं (`/ टूडू /${newTodo.id}`)
})
यह("todos सरणी में एक आइटम जोड़ना चाहिए", एसिंक () => {
स्थिरांक प्रतिक्रिया = इंतजार अनुरोध (बेसयूआरएल)। पोस्ट ("/todo").send(newTodo);
स्थिरांक lastItem = response.body.data[response.body.data.length-1]
अपेक्षा करना(जवाब।स्थिति का कोड)।होना(201);
अपेक्षा करना(अंतिम आइटम।वस्तु)।होना(नया टोडो["वस्तु"]);
अपेक्षा करना(अंतिम आइटम।पूरा किया हुआ)।होना(नया टोडो["पूरा किया हुआ"]);
});
});
यहां, आप टूडू डेटा को तर्क के रूप में भेजें () विधि में पास कर रहे हैं। प्रतिक्रिया में 201 स्थिति कोड होना चाहिए और डेटा ऑब्जेक्ट में सभी टूडू आइटम भी शामिल होने चाहिए। यह जांचने के लिए कि क्या टूडू वास्तव में बनाया गया था, जांचें कि क्या लौटाए गए टूडो में अंतिम प्रविष्टि आपके द्वारा अनुरोध में भेजी गई प्रविष्टि से मेल खाती है।
PUT /todos/:id एंडपॉइंट को अपडेट किया गया आइटम वापस करना चाहिए:
ऐप.पुट("/todos/:id", (req, res) => {
प्रयत्न {
स्थिरांक आईडी = req.params.id
स्थिरांक todo = todos.find((todo) => todo.id == id);
अगर (! टूडू) {
फेंकनानयागलती("टोडो नहीं मिला")
}
todo.completed = req.body.completed;
वापसीरेस।दर्जा(201).json({
डेटा: टूडू,
गलती: शून्य,
});
} पकड़ (गलती) {
वापसीरेस।दर्जा(500).json({
जानकारी: शून्य,
त्रुटि: त्रुटि,
});
}
});
प्रतिक्रिया का परीक्षण इस प्रकार करें:
वर्णन करना("एक टूडू अपडेट करें", () => {
स्थिरांक न्यूटोडो = {
// करने के लिए
}
सबसे पहले(अतुल्यकालिक () => {
प्रतीक्षा अनुरोध (बेसयूआरएल)। पोस्ट ("/todo") भेजें (नया टोडो);
})
आख़िरकार(अतुल्यकालिक () => {
इंतजार अनुरोध (बेसयूआरएल)। हटाएं (`/ टूडू /${newTodo.id}`)
})
यह("आइटम को अपडेट करना चाहिए यदि वह मौजूद है", एसिंक () => {
स्थिरांक प्रतिक्रिया = इंतजार अनुरोध (बेसयूआरएल)। डाल (`/ todos/${newTodo.id}`)।भेजना({
पूरा किया हुआ: सच,
});
अपेक्षा करना(जवाब।स्थिति का कोड)।होना(201);
अपेक्षा करना(जवाब।तन।जानकारी।पूरा किया हुआ)।होना(सच);
});
});
प्रतिक्रिया निकाय में पूर्ण मान सत्य होना चाहिए। उस आइटम की आईडी शामिल करना याद रखें जिसे आप URL में अपडेट करना चाहते हैं।
DELETE /todos/:id समापन बिंदु का परीक्षण करें
index.js में, DELETE एंडपॉइंट बनाएं। इसे हटाए गए आइटम के बिना टूडू डेटा वापस करना चाहिए।
ऐप.डिलीट("/todos/:id", (req, res) => {
प्रयत्न {
स्थिरांक आईडी = req.params.id
स्थिरांक टूडू = टोडोस [0]
अगर (टूडू) {
सबब्याह(पहचान, 1)
}
वापसीरेस।दर्जा(200).json({
डेटा: टूडोस,
गलती: शून्य,
});
} पकड़ (गलती) {
वापसीरेस।दर्जा(500).json({
जानकारी: शून्य,
त्रुटि: त्रुटि,
});
}
});
एंडपॉइंट का परीक्षण करने के लिए, आप जांच सकते हैं कि हटाए गए आइटम अभी भी लौटाए गए डेटा में मौजूद हैं या नहीं:
वर्णन करना("एक टूडू हटाएं", () => {
स्थिरांक न्यूटोडो = {
// करने के लिए
}
सबसे पहले(अतुल्यकालिक () => {
प्रतीक्षा अनुरोध (बेसयूआरएल)। पोस्ट ("/todo") भेजें (नया टोडो);
})
यह("एक आइटम हटा देना चाहिए", एसिंक () => {
स्थिरांक प्रतिक्रिया = इंतजार अनुरोध (बेसयूआरएल)। हटाएं (`/ todos/${newTodo.id}`);
स्थिरांक todos = response.body.data
स्थिरांक मौजूद है = todos.find (todo => {
newTodo.id == todoId
})
उम्मीद (मौजूद)अपरिभाषित)
});
});
DELETE समापन बिंदु से लौटाए गए डेटा में हटाया गया आइटम नहीं होना चाहिए। चूंकि लौटाए गए आइटम एक सरणी में हैं, इसलिए आप यह जांचने के लिए ऐरे [आईडी] का उपयोग कर सकते हैं कि एपीआई ने आइटम को सही तरीके से हटा दिया है या नहीं। परिणाम झूठा होना चाहिए।
आरईएसटी एपीआई बनाना
इस लेख में, आपने सीखा कि जेस्ट एपीआई का उपयोग करके एक्सप्रेस रेस्ट एपीआई का परीक्षण कैसे किया जाता है। आपने GET, PUT, POST, और DELETE HTTP अनुरोधों के लिए परीक्षण लिखे और देखा कि URL और अनुरोध में समापन बिंदु पर डेटा कैसे भेजा जाए। अपने स्वयं के रेस्ट एपीआई का परीक्षण करते समय आपको इस ज्ञान को लागू करने में सक्षम होना चाहिए।