सरू वादा और सरू अतुल्यकालिक: 13 महत्वपूर्ण तथ्य

हमारे पिछले में लेख, हमने सरू में कॉन्फ़िगरेशन और JSON फ़ाइलों में कॉन्फ़िगर किए जा सकने वाले विभिन्न विकल्पों को देखा। यह लेख समझेगा सरू वादा और सरू अतुल्यकालिक हमारी परियोजना में व्यावहारिक कार्यान्वयन और उदाहरणों के साथ व्यवहार। हम यह भी चर्चा करेंगे कि हमारे एसिंक्रोनस कोड और कुछ आवश्यक कार्यों में प्रतीक्षा को कैसे शामिल किया जाए: wrap() और task()। आएँ शुरू करें!

सरू वादा और सरू अतुल्यकालिक:

सरू वादा और सरू अतुल्यकालिक प्रकृति कुछ आवश्यक अवधारणाएँ हैं। किसी भी अन्य जावास्क्रिप्ट ढांचे की तरह, सरू भी अतुल्यकालिक और वादों के इर्द-गिर्द घूमता है। सरू आंतरिक रूप से सभी अतुल्यकालिक व्यवहार को संभालता है, और यह उपयोगकर्ता से छिपा होता है। हम इस्तेमाल करेंगे .then() हमारे कोड में मैन्युअल रूप से वादों को संभालने के लिए। एनपीएम में सरू-वादा जैसे बाहरी पैकेज हैं जहां हम सरू के अतुल्यकालिक व्यवहार में हेरफेर कर सकते हैं। हम इनमें से प्रत्येक विषय पर विस्तार से चर्चा करेंगे।

सरू वादा और सरू अतुल्यकालिक
सरू वादा

विषय - सूची

सरू अतुल्यकालिक

जैसा कि हम जानते हैं, सरू पर आधारित है नोड जेएस. Node.js से निर्मित कोई भी ढांचा है अतुल्यकालिक. सरू के अतुल्यकालिक व्यवहार को समझने से पहले, हमें तुल्यकालिक और अतुल्यकालिक प्रकृति के बीच के अंतर को जानना चाहिए।

तुल्यकालिक प्रकृति

एक सिंक्रोनस प्रोग्राम में, एक कोड के निष्पादन के दौरान, केवल अगर पहली पंक्ति को सफलतापूर्वक निष्पादित किया जाता है, तो दूसरी पंक्ति निष्पादित हो जाएगी। यह पहली पंक्ति निष्पादित होने तक प्रतीक्षा करता है। यह क्रम से चलता है।

अतुल्यकालिक प्रकृति

कोड एक साथ निष्पादित होता है, पिछले कमांड की स्थिति को परेशान किए बिना प्रत्येक चरण के निष्पादित होने की प्रतीक्षा करता है। यद्यपि हमने क्रमिक रूप से अपना कोड लिखा है, अतुल्यकालिक कोड किसी भी चरण के पूरा होने की प्रतीक्षा किए बिना निष्पादित हो जाता है और पिछले कमांड/कोड से पूरी तरह से स्वतंत्र होता है।

सरू में अतुल्यकालिक क्या है?

सभी सरू कमांड प्रकृति में अतुल्यकालिक हैं। सरू में एक आवरण होता है जो हमारे द्वारा लिखे गए अनुक्रमिक कोड को समझता है, उन्हें आवरण में संलग्न करता है, और जब हम कोड निष्पादित करते हैं तो बाद में चलता है। तो, सरू हमारे सभी काम करता है जो एसिंक्स प्रकृति और वादों से संबंधित है!

आइए इसके लिए एक उदाहरण समझते हैं।

 it('प्रौद्योगिकी URL पर नेविगेट करने के लिए प्रौद्योगिकी विकल्प पर क्लिक करें', फ़ंक्शन () { cy.visit('https://techiescience.com/') // कोई आदेश निष्पादित नहीं किया गया है // प्रौद्योगिकी विकल्प cy पर क्लिक करें। get('.fl-node-5f05604c3188e > .fl-col-content > .fl-module > .fl-module-content > .fl-photo > .fl-photo-content > a > .fl-photo-img' ) // यहां भी कुछ भी निष्पादित नहीं किया गया है .click() // अभी तक कुछ भी नहीं हुआ है cy.url() // यहां भी कोई आदेश निष्पादित नहीं किया गया है .should('include', '/technology') // नहीं, कुछ भी नहीं }); // अब, सभी परीक्षण कार्यों का निष्पादन पूरा हो गया है // साइप्रस ने सभी कमांडों को कतारबद्ध कर दिया है, और अब वे क्रम में चलेंगे

यह काफी सरल और मजेदार था। अब हम समझ गए हैं कि सरू एसिंक्रोनस कमांड कैसे काम करता है। आइए हम गहराई में जाएं जहां हम सिंक और एसिंक कोड को मिलाने की कोशिश कर रहे हैं।

सरू सिंक्रोनस और एसिंक्रोनस कमांड को मिलाना

जैसा कि हमने देखा, सरू कमांड अतुल्यकालिक हैं। किसी भी सिंक्रोनस कोड को इंजेक्ट करते समय, सरू सिंक कोड के निष्पादित होने की प्रतीक्षा नहीं करता है; इसलिए सिंक कमांड किसी भी पिछले सरू कमांड की प्रतीक्षा किए बिना भी पहले निष्पादित होते हैं। आइए हम बेहतर समझने के लिए एक संक्षिप्त उदाहरण देखें।

 it('प्रौद्योगिकी URL पर नेविगेट करने के लिए प्रौद्योगिकी विकल्प पर क्लिक करें', फ़ंक्शन () { cy.visit('https://techiescience.com/') // प्रौद्योगिकी विकल्प cy.get('.fl-) पर क्लिक करें नोड-5f05604c3188e > .fl-col-content > .fl-module > .fl-module-content > .fl-photo > .fl-photo-content > a > .fl-photo-img') .click() cy .url() // यहां भी कोई आदेश निष्पादित नहीं किया गया है। चाहिए ('शामिल है', '/ प्रौद्योगिकी') // नहीं, कुछ भी नहीं कंसोल.लॉग ("यह लॉग की जांच करने के लिए है") // एसिंक व्यवहार की जांच करने के लिए लॉग करें }); });
लॉग स्क्रीनशॉट 1
लॉग कमांड का तुल्यकालिक निष्पादन

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

यदि हम चाहते हैं कि वे अपेक्षित रूप से निष्पादित हों, तो हमें इसे अंदर लपेटना चाहिए .then() समारोह। आइए एक उदाहरण से समझते हैं।

it('प्रौद्योगिकी URL पर नेविगेट करने के लिए प्रौद्योगिकी विकल्प पर क्लिक करें', फ़ंक्शन () { cy.visit('https://techiescience.com/') // प्रौद्योगिकी विकल्प cy.get('.fl-) पर क्लिक करें नोड-5f05604c3188e > .fl-col-content > .fl-module > .fl-module-content > .fl-photo > .fl-photo-content > a > .fl-photo-img') .click() cy .url() // यहां भी कोई आदेश निष्पादित नहीं किया गया .should('include', '/technology') // नहीं, कुछ भी नहीं .then(() => { console.log("यह लॉग की जांच करने के लिए है") // एसिंक व्यवहार की जांच करने के लिए लॉग करें });
सिंक लॉग के बाद
.then () कमांड के साथ एसिंक्स निष्पादन

सरू वादा क्या है?

जैसा कि हमने ऊपर देखा, सरू निष्पादन से पहले सभी आदेशों को लागू करता है। विस्तार से व्याख्या करने के लिए, हम कह सकते हैं कि सरू वादे (आदेश) को वादों की श्रृंखला में जोड़ता है। सरू सभी आदेशों को एक श्रृंखला में एक वादे के रूप में बताता है।

वादों को समझने के लिए, उनकी तुलना वास्तविक जीवन के परिदृश्य से करें। स्पष्टीकरण वादे को अतुल्यकालिक प्रकृति में भी परिभाषित करता है। अगर कोई आपसे वादा करता है, तो वे या तो अस्वीकार or पूरा उनके द्वारा दिया गया बयान। इसी तरह, अतुल्यकालिक में, या तो वादे करता है अस्वीकार or पूरा कोड जिसे हम एक वादे में लपेटते हैं।

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

साइप्रस वादे के राज्य

सरू के आदेशों के आधार पर वादों के तीन अलग-अलग राज्य हैं। वे

  • हल - तब होता है जब स्टेप/कमांड सफलतापूर्वक निष्पादित हो जाता है।
  • अपूर्ण - राज्य जहां निष्पादन शुरू हो गया है, लेकिन परिणाम अनिश्चित है।
  • अस्वीकार - तब होता है जब चरण विफल हो गया है।

एक जावास्क्रिप्ट प्रोग्रामर के रूप में, हम अपने कोड में वादे लिखते हैं और उन्हें वापस करते हैं। उदाहरण के लिए,

//यह कोड केवल वर्णन ('साइप्रस उदाहरण', फ़ंक्शन () {आईटी ('प्रौद्योगिकी यूआरएल पर नेविगेट करने के लिए प्रौद्योगिकी विकल्प पर क्लिक करें', फ़ंक्शन () { cy.visit('https://techiescience.) के प्रदर्शन के लिए है। com/') // टेक्नोलॉजी विकल्प cy.get('.fl-node-5f05604c3188e > .fl-col-content > .fl-module > .fl-module-content > .fl-photo > .fl- पर क्लिक करें। फ़ोटो-सामग्री > a > .fl-photo-img') .then(() => { return cy.click(); }) cy.url() .then(() => { return cy.should(' शामिल', '/प्रौद्योगिकी') }) });

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

    it('प्रौद्योगिकी URL पर नेविगेट करने के लिए प्रौद्योगिकी विकल्प पर क्लिक करें', फ़ंक्शन () { cy.visit('https://techiescience.com/') // प्रौद्योगिकी विकल्प cy.get('.fl-) पर क्लिक करें नोड-5f05604c3188e > .fl-col-content > .fl-module > .fl-module-content > .fl-photo > .fl-photo-content > a > .fl-photo-img') .click() cy .url() .should('include', '/technology') }); });
नमूना
आंतरिक रूप से संभाले गए वादों के साथ सरू कमांड

उपरोक्त कोड अनाड़ी नहीं है और पढ़ने और समझने में आसान है। सरू सभी वादे के काम को संभालता है, और यह उपयोगकर्ता से छिपा होता है। इसलिए हमें कहीं भी वादों को संभालने या वापस करने के बारे में चिंता करने की ज़रूरत नहीं है!

आप सरू में प्रतीक्षा का उपयोग कैसे करते हैं?

जैसा कि ऊपर चर्चा की गई है, सरू के पास एक कमांड कतार बनाकर और उन्हें क्रम में चलाकर अतुल्यकालिक कोड को संभालने का अपना तरीका है। जोड़ा जा रहा है awaits आदेशों के लिए अपेक्षा के अनुरूप काम नहीं करेगा। चूंकि सरू आंतरिक रूप से सब कुछ संभाल रहा है, इसलिए मैं इसे जोड़ने की सलाह नहीं दूंगा awaits कोड के लिए।

यदि आपको प्रतीक्षा जोड़ने की आवश्यकता है, तो आप किसी तृतीय-पक्ष लाइब्रेरी का उपयोग कर सकते हैं जैसे सरू-वादा यह बदलता है कि सरू कैसे काम करता है। यह पुस्तकालय आपको उपयोग करने देगा का वादा किया आदेशों में, और उपयोग करें का इंतजार कोड में

आइए समझते हैं कि वेटिंग का उपयोग करने के तरीके और उनका उपयोग कैसे न करें।

आपको इस तरह प्रतीक्षा का उपयोग नहीं करना चाहिए

// इस तरह से wait का उपयोग न करें, explore('विजिट द पेज', () => { (async () => { cy.visit('https://techiescience.com/') wait cy.url()। चाहिए('शामिल', '/प्रौद्योगिकी'); })() })

इसके बजाय, आप इस तरह उपयोग कर सकते हैं

वर्णन('पेज पर जाएँ', () => { cy.visit('https://techiescience.com/').then(async() => wait cy.url().should('include', ' /तकनीकी') ()) })

यह किसी भी सरू कमांड के लिए काम करेगा।

सरू लपेटें

wrap() सरू में एक फ़ंक्शन है जो किसी भी वस्तु को उत्पन्न करता है जिसे तर्क के रूप में पारित किया जाता है।

वाक्य - विन्यास

cy.wrap(subject)
cy.wrap(subject, options)

आइए हम एक उदाहरण देखें कि कैसे पहुंचें wrap() हमारे कोड में।

const getName = () => {वापसी 'घोड़ा'} cy.wrap ({नाम: getName})। आह्वान ('नाम')। चाहिए ('eq', 'घोड़ा') // सच

उदाहरण में, हम लपेट रहे हैं getName और फिर इसके लिए नाम का आह्वान करें।

सरू लपेटें वादा

हम कोड द्वारा लौटाए गए वादों को लपेट सकते हैं। आदेश प्राप्त मूल्य तक पहुँचने से पहले हल करने के वादे की प्रतीक्षा करेंगे और। फिर अगले आदेश या अभिकथन के लिए आगे बढ़ें।

कॉन्स्ट कस्टमप्रॉमिस = नया वादा ((समाधान, अस्वीकार) => {// हम एसिंक कोड तक पहुंचने के लिए सेटटाइमआउट () फ़ंक्शन का उपयोग करते हैं। सेटटाइमआउट (() => {संकल्प ({प्रकार: 'सफलता', संदेश: 'सेब और संतरे') , })}, 2500) }) यह ('वादों को हल करने के लिए प्रतीक्षा करनी चाहिए', () => { cy.wrap(customPromise).its('message'). should('eq', 'Apples and Oranges') )});

जब तर्क cy.wrap() एक वादा है, यह वादे के सुलझने का इंतजार करेगा। यदि वादा खारिज कर दिया जाता है, तो परीक्षण विफल हो जाएगा।

सरू-वादा npm

यदि हम सरू के वादों में हेरफेर करना चाहते हैं, तो हम अतिरिक्त रूप से एक पुस्तकालय या पैकेज का उपयोग कर सकते हैं जिसे कहा जाता है सरू-वादा और इसे हमारे कोड में शामिल करें। यह पैकेज आपको परिवर्तित करने की अनुमति देगा a सरू कमांड एक वादे में और आपको कोड में प्रतीक्षा या एसिंक करने की अनुमति देता है। हालांकि, ये शर्तें काम नहीं करेंगी before or beforeEach ब्लॉक। प्रारंभ में, हमें टर्मिनल में निम्न कमांड पास करके अपने प्रोजेक्ट में पैकेज स्थापित करना चाहिए।

npm i cypress-promise

एक बार इंस्टॉल हो जाने पर, टर्मिनल कुछ इस तरह दिखेगा।

स्क्रीनशॉट 2021 08 11 अपराह्न 9.43.42 बजे
सरू-वादा स्थापित

स्थापना के बाद, हमें पुस्तकालय को अपनी परीक्षण फ़ाइल में आयात करना चाहिए।

import promisify from 'cypress-promise'

इस पुस्तकालय के साथ, आप मूल सरू के वादे को बना और ओवरराइड कर सकते हैं और कोड में प्रतीक्षा और एसिंक का उपयोग कर सकते हैं। आपको वादे के साथ पहुंचना चाहिए promisify खोजशब्द। आइए हम उसी के लिए एक उदाहरण देखें।

आयात 'सरू-वादा' से वादा करता है यह ('एसिंक/प्रतीक्षा के साथ परीक्षण चलाना चाहिए', एसिंक () => {कॉन्स्ट सेब = वादा करने का इंतजार करें (साइ। रैप ('सेब')) कॉन्स्ट संतरे = वादा का इंतजार करें (साइ। रैप ('संतरे')) उम्मीद (सेब) से बराबर ('सेब') उम्मीद (संतरा) से बराबर ('संतरे')});
स्क्रीनशॉट 2021 08 11 अपराह्न 9.49.02 बजे
सरू-वादा में वादा

यह सीखने में बहुत आसान और मजेदार था! इस तरह, आप सरू में एसिंक्रोनस कोड असाइन कर सकते हैं।

साइप्रस एसिंक टास्क

task() सरू में एक फ़ंक्शन है जो कोड को Node. यह कमांड आपको ब्राउज़र से नोड में स्विच करने और कोड पर परिणाम वापस करने से पहले नोड में कमांड निष्पादित करने की अनुमति देता है।

वाक्य - विन्यास

cy.task(event)
cy.task(event, arg)
cy.task(event, arg, options)

task() या तो एक मूल्य या वादा देता है। task() अगर वादा वापस किया जाता है तो विफल हो जाएगा undefined. इस तरह, यह उपयोगकर्ता को टाइपो को पकड़ने में मदद करता है जहां कुछ परिदृश्यों में ईवेंट को हैंडल नहीं किया जाता है। यदि आपको कोई मान वापस करने की आवश्यकता नहीं है, तो पास करें null मूल्य.

आम सवाल-जवाब

सरू सिंक्रोनस या एसिंक्रोनस है?

सरू है अतुल्यकालिक आदेशों के निष्पादन के पूरा होने की प्रतीक्षा करने के बजाय कतारबद्ध आदेशों को वापस करके। हालांकि यह अतुल्यकालिक है, फिर भी यह सभी परीक्षण चरणों को क्रमिक रूप से चलाता है। सरू इंजन इस सारे व्यवहार को संभालता है।

क्या सरू में वादा श्रृंखला को पकड़ना संभव है?

सरू को इस तरह से डिजाइन किया गया है कि हम वादों को पूरा नहीं कर पाएंगे। ये आदेश बिल्कुल वादे नहीं हैं, लेकिन यह एक वादे की तरह दिखता है। इस तरह, हम स्पष्ट हैंडलर नहीं जोड़ सकते जैसे catch.