सरू वादा और सरू अतुल्यकालिक: व्यावहारिक कार्यान्वयन, उदाहरण

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

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

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

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

विषय - सूची

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

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

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

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

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

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

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

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

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

 it('click on the technology option to navigate to the technology URL', function () {
        cy.visit('https://lambdageeks.com/') // No command is executed

        //click on the technology option
        cy.get('.fl-node-5f05604c3188e > .fl-col-content > .fl-module > .fl-module-content > .fl-photo > .fl-photo-content > a > .fl-photo-img') // Nothing is executed here too
            .click() // Nothing happens yet

        cy.url() // No commands executed here too
            .should('include', '/technology') // No, nothing.
    });
        // Now, all the test functions have completed executing
        // Cypress had queued all the commands, and now they will run in sequence

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

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

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

 it('click on the technology option to navigate to the technology URL', function () {
        cy.visit('https://lambdageeks.com/') 

        //click on the technology option
        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() // No commands executed here too
            .should('include', '/technology') // No, nothing.
        console.log("This is to check the log")  // Log to check the async behaviour
    });
});
सरू वादा और सरू अतुल्यकालिक: व्यावहारिक कार्यान्वयन, उदाहरण
लॉग कमांड का तुल्यकालिक निष्पादन

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

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

it('click on the technology option to navigate to the technology URL', function () {
        cy.visit('https://lambdageeks.com/') 

        //click on the technology option
        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() // No commands executed here too
            .should('include', '/technology') // No, nothing.
        .then(() => {
            console.log("This is to check the log")  // Log to check the async behaviour
        });
    });
सरू वादा और सरू अतुल्यकालिक: व्यावहारिक कार्यान्वयन, उदाहरण
.then () कमांड के साथ एसिंक्स निष्पादन

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

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

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

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

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

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

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

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

//This code is only for demonstration
describe('Cypress Example ', function () {
    it('click on the technology option to navigate to the technology URL', function () {
        cy.visit('https://lambdageeks.com/')

        //click on the technology option
        cy.get('.fl-node-5f05604c3188e > .fl-col-content > .fl-module > .fl-module-content > .fl-photo > .fl-photo-content > a > .fl-photo-img')
            .then(() => {
                return cy.click();
            })

        cy.url() 
            .then(() => {
                return cy.should('include', '/technology') 
            })
    });
});

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

    it('click on the technology option to navigate to the technology URL', function () {
        cy.visit('https://lambdageeks.com/')

        //click on the technology option
        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')
    });
});
सरू वादा और सरू अतुल्यकालिक: व्यावहारिक कार्यान्वयन, उदाहरण
आंतरिक रूप से संभाले गए वादों के साथ सरू कमांड

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

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

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

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

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

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

//Do not use await this way
describe('Visit the page', () => {
  (async () => {
     cy.visit('https://lambdageeks.com/')
     await cy.url().should('include', '/technology');
  })()
})

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

describe('Visit the page', () => {
  cy.visit('https://lambdageeks.com/').then(async () => await cy.url().should('include', '/technology') ())
})

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

सरू लपेटें

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

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

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

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

const getName = () => {
  return 'Horse'
}

cy.wrap({ name: getName }).invoke('name').should('eq', 'Horse') // true

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

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

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

const customPromise = new Promise((resolve, reject) => {
  // we use setTimeout() function to access async code.
  setTimeout(() => {
    resolve({
      type: 'success',
      message: 'Apples and Oranges',
    })
  }, 2500)
})

it('should wait for promises to resolve', () => {
  cy.wrap(customPromise).its('message').should('eq', 'Apples and Oranges')
});

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

सरू-वादा npm

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

npm i cypress-promise

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

सरू वादा और सरू अतुल्यकालिक: व्यावहारिक कार्यान्वयन, उदाहरण
सरू-वादा स्थापित

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

import promisify from 'cypress-promise'

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

import promisify from 'cypress-promise'

it('should run tests with async/await', async () => {
    const apple = await promisify(cy.wrap('apple'))
    const oranges = await promisify(cy.wrap('oranges'))

    expect(apple).to.equal('apple')
    expect(oranges).to.equal('oranges')
});
सरू वादा और सरू अतुल्यकालिक: व्यावहारिक कार्यान्वयन, उदाहरण
सरू-वादा में वादा

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

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

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

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

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

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

अक्सर पूछे जाने वाले प्रश्न

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

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

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

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

ऐश्वर्या लक्ष्मी के बारे में

सरू वादा और सरू अतुल्यकालिक: व्यावहारिक कार्यान्वयन, उदाहरणमैं एक परीक्षण उत्साही हूं और परीक्षण क्षेत्र में लगभग 2+ वर्षों का अनुभव रखता हूं। मुझे अपने क्षेत्र में नई चीजों का पता लगाने और उन्हें अपने साथियों के साथ साझा करने के लिए परीक्षण और प्यार करने का शौक है। मुझे अपने खाली समय में सबसे सरल लेकिन प्रभावी तरीके से ब्लॉग लिखना अच्छा लगता है। एक परीक्षक के रूप में, मैं चीजों को पूर्णता में रखना पसंद करता हूं, इसलिए मैं चाहता हूं कि मेरे पाठकों को तकनीक की सही समझ हो। मैं परीक्षण से संबंधित नई तकनीकों से खुद को अपडेट रखता हूं और उन्हें समझने में समय बिताता हूं। मुझे छात्रों को परीक्षण में अवधारणाओं को समझने में मदद करने में खुशी हो रही है।
आइए लिंक्डइन के माध्यम से जुड़ें - https://www.linkedin.com/in/aishwarya-lakshmi-n-46903217a

en English
X