जब एंड-टू-एंड परीक्षण की बात आती है, तो बाहरी निर्भरता को नियंत्रित करने से आपके परीक्षणों की विश्वसनीयता और गति में काफी वृद्धि हो सकती है। साइप्रस, एक आधुनिक वेब परीक्षण ढांचा, HTTP अनुरोधों को मॉक करने और स्टब करने के लिए शक्तिशाली क्षमताएं प्रदान करता है, जो आपको वास्तविक बैकएंड सेवाओं पर भरोसा किए बिना विभिन्न परिदृश्यों का अनुकरण करने की अनुमति देता है। इस पोस्ट में, हम यह पता लगाएंगे कि आपके परीक्षणों को अधिक मजबूत और कुशल बनाने के लिए एपीआई कॉल को मॉकिंग और स्टबिंग करने के लिए साइप्रस के cy.intercept() का लाभ कैसे उठाया जाए।
साइप्रस में HTTP अनुरोधों को मॉकिंग और स्टब करने से कई लाभ मिलते हैं:
यदि आपने अभी तक साइप्रस स्थापित नहीं किया है, तो आप इसे निम्नलिखित कमांड के साथ सेट कर सकते हैं:
npm install cypress --save-dev npx cypress open
सुनिश्चित करें कि आगे बढ़ने से पहले आपके पास बुनियादी साइप्रस परियोजना संरचना तैयार है।
साइप्रेस में cy.intercept() कमांड आपको नेटवर्क अनुरोधों और प्रतिक्रियाओं को रोकने और संशोधित करने की अनुमति देता है। यह अप्रचलित cy.route() कमांड को प्रतिस्थापित करता है और अधिक लचीलापन और शक्ति प्रदान करता है।
बुनियादी उदाहरण
आइए एक बुनियादी उदाहरण से शुरू करें जहां हम एक एपीआई प्रतिक्रिया का मजाक उड़ाते हैं:
// cypress/integration/mock_basic.spec.js describe('Mocking API Responses', () => { it('should display mocked data', () => { cy.intercept('GET', '/api/todos', { statusCode: 200, body: [ { id: 1, title: 'Mocked Todo 1', completed: false }, { id: 2, title: 'Mocked Todo 2', completed: true } ] }).as('getTodos'); cy.visit('/todos'); cy.wait('@getTodos'); cy.get('.todo').should('have.length', 2); cy.get('.todo').first().should('contain.text', 'Mocked Todo 1'); }); });
इस उदाहरण में, हम /api/todos के लिए एक GET अनुरोध को रोकते हैं और एक नकली प्रतिक्रिया प्रदान करते हैं। As('getTodos') इंटरसेप्टेड अनुरोध के लिए एक उपनाम निर्दिष्ट करता है, जिससे आपके परीक्षणों में संदर्भ देना आसान हो जाता है।
त्रुटियों का अनुकरण
यह जांचने के लिए कि आपका एप्लिकेशन उन्हें कैसे संभालता है, आप विभिन्न HTTP त्रुटि स्थितियों का अनुकरण कर सकते हैं:
// cypress/integration/mock_errors.spec.js describe('Simulating API Errors', () => { it('should display error message on 500 response', () => { cy.intercept('GET', '/api/todos', { statusCode: 500, body: { error: 'Internal Server Error' } }).as('getTodosError'); cy.visit('/todos'); cy.wait('@getTodosError'); cy.get('.error-message').should('contain.text', 'Failed to load todos'); }); });
प्रतिक्रियाओं में देरी
यह जांचने के लिए कि आपका एप्लिकेशन धीमी नेटवर्क प्रतिक्रियाओं को कैसे संभालता है, आप विलंब का परिचय दे सकते हैं:
// cypress/integration/mock_delays.spec.js describe('Simulating Slow Responses', () => { it('should display loading indicator during slow response', () => { cy.intercept('GET', '/api/todos', (req) => { req.reply((res) => { res.delay(2000); // 2-second delay res.send({ body: [] }); }); }).as('getTodosSlow'); cy.visit('/todos'); cy.get('.loading').should('be.visible'); cy.wait('@getTodosSlow'); cy.get('.loading').should('not.exist'); }); });
सशर्त उपहास
आप अनुरोध निकाय या हेडर के आधार पर सशर्त रूप से प्रतिक्रियाओं का नकल कर सकते हैं:
// cypress/integration/mock_conditional.spec.js describe('Conditional Mocking', () => { it('should mock response based on request body', () => { cy.intercept('POST', '/api/todos', (req) => { if (req.body.title === 'Special Todo') { req.reply({ statusCode: 201, body: { id: 999, title: 'Special Todo', completed: false } }); } }).as('createTodo'); cy.visit('/todos'); cy.get('input[name="title"]').type('Special Todo'); cy.get('button[type="submit"]').click(); cy.wait('@createTodo'); cy.get('.todo').should('contain.text', 'Special Todo'); }); });
साइप्रस में मॉकिंग और स्टबिंग शक्तिशाली तकनीकें हैं जो आपके परीक्षणों को तेज़, अधिक विश्वसनीय और बनाए रखने में आसान बना सकती हैं। HTTP अनुरोधों को इंटरसेप्ट करके और कस्टम प्रतिक्रियाएँ प्रदान करके, आप बाहरी सेवाओं पर भरोसा किए बिना परीक्षण परिदृश्यों की एक विस्तृत श्रृंखला बना सकते हैं। अपने साइप्रस परीक्षणों में मॉकिंग और स्टबिंग में महारत हासिल करने के लिए इस गाइड में दी गई सर्वोत्तम प्रथाओं और उदाहरणों का पालन करें।
खुश परीक्षण!
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3