সাইপ্রেস প্রতিশ্রুতি এবং সাইপ্রেস অ্যাসিঙ্ক্রোনাস: 13 গুরুত্বপূর্ণ তথ্য

আমাদের আগেরটিতে প্রবন্ধ, আমরা সাইপ্রাসে কনফিগারেশন এবং বিভিন্ন অপশন দেখেছি যা JSON ফাইলে কনফিগার করা যায়। এই নিবন্ধটি বুঝতে পারবে সাইপ্রেস প্রতিশ্রুতি এবং সাইপ্রাস অ্যাসিঙ্ক্রোনাস আমাদের প্রকল্পে বাস্তবায়ন এবং উদাহরণ সহ আচরণ। আমরা কীভাবে আমাদের অ্যাসিঙ্ক্রোনাস কোডে প্রতীক্ষাকে অন্তর্ভুক্ত করব এবং কিছু প্রয়োজনীয় ফাংশন যেমন আলোচনা করব wrap() এবং task()। চল শুরু করি!

সাইপ্রাস প্রতিশ্রুতি এবং সাইপ্রাস অ্যাসিঙ্ক্রোনাস:

সাইপ্রেস প্রতিশ্রুতি এবং সাইপ্রাস অ্যাসিঙ্ক্রোনাস প্রকৃতি কিছু অপরিহার্য ধারণা। অন্য যেকোনো জাভাস্ক্রিপ্ট কাঠামোর মতো, সাইপ্রাসও অসিঙ্ক্রোনাস এবং প্রতিশ্রুতির চারপাশে ঘুরে। সাইপ্রাস অভ্যন্তরীণভাবে সমস্ত অ্যাসিঙ্ক্রোনাস আচরণ পরিচালনা করে এবং এটি ব্যবহারকারীর কাছ থেকে লুকানো থাকে। আমরা ব্যবহার করবো .then() আমাদের কোডে ম্যানুয়ালি প্রতিশ্রুতিগুলি পরিচালনা করতে। এনপিএম-তে সাইপ্রাস-প্রতিশ্রুতির মতো বাহ্যিক প্যাকেজ রয়েছে যেখানে আমরা সাইপ্রাস অ্যাসিঙ্ক্রোনাস আচরণকে কাজে লাগাতে পারি। আমরা এই প্রতিটি বিষয়ে বিস্তারিত আলোচনা করব।

সাইপ্রাস প্রতিশ্রুতি এবং সাইপ্রাস অ্যাসিঙ্ক্রোনাস
সাইপ্রেস প্রতিশ্রুতি

সুচিপত্র

সাইপ্রাস অ্যাসিঙ্ক্রোনাস

আমরা জানি, সাইপ্রেস এর উপর ভিত্তি করে নোড জেএস। Node.js থেকে নির্মিত যে কোন কাঠামো হল বিল্ড অসমনিয়ত। সাইপ্রাসের অ্যাসিঙ্ক্রোনাস আচরণ বোঝার আগে, আমাদের সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস প্রকৃতির মধ্যে পার্থক্য জানা উচিত।

সমকালীন প্রকৃতি

একটি সিঙ্ক্রোনাস প্রোগ্রামে, একটি কোড কার্যকর করার সময়, শুধুমাত্র প্রথম লাইন সফলভাবে কার্যকর করা হলে, দ্বিতীয় লাইনটি কার্যকর করা হবে। প্রথম লাইনটি কার্যকর না হওয়া পর্যন্ত এটি অপেক্ষা করে। এটি ক্রমানুসারে চলে।

অসিঙ্ক্রোনাস প্রকৃতি

কোডটি একযোগে কার্যকর হয়, পূর্ববর্তী কমান্ডের অবস্থাকে বিরক্ত না করে প্রতিটি পদক্ষেপ কার্যকর করার জন্য অপেক্ষা করে। যদিও আমরা ক্রমানুসারে আমাদের কোড লিখেছি, অ্যাসিঙ্ক্রোনাস কোডটি কোন পদক্ষেপ সম্পূর্ণ হওয়ার অপেক্ষা না করেই কার্যকর করা হয় এবং পূর্ববর্তী কমান্ড/কোড থেকে সম্পূর্ণ স্বাধীন।

সাইপ্রাসে অ্যাসিঙ্ক্রোনাস কী?

সমস্ত সাইপ্রাস কমান্ড প্রকৃতিতে অসিঙ্ক্রোনাস। সাইপ্রেসের একটি মোড়ক রয়েছে যা আমরা যে ক্রমিক কোডটি লিখি তা বুঝতে পারে, সেগুলিকে মোড়কে জড়িয়ে রাখে এবং কোডটি চালানোর পরে পরে চালায়। সুতরাং, সাইপ্রাস আমাদের সমস্ত কাজ করে যা অ্যাসিঙ্ক প্রকৃতি এবং প্রতিশ্রুতির সাথে সম্পর্কিত!

আসুন এর জন্য একটি উদাহরণ বুঝতে পারি।

 এটি('টেকনোলজি ইউআরএলে নেভিগেট করতে প্রযুক্তি বিকল্পে ক্লিক করুন', ফাংশন () { cy.visit('https://lambdageeks.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') // না, কিছুই না। }); // এখন, সমস্ত পরীক্ষার ফাংশন কার্যকর করা শেষ হয়েছে // সাইপ্রেস সমস্ত কমান্ড সারিবদ্ধ করেছে, এবং এখন সেগুলি ক্রমানুসারে চলবে

এটি বেশ সহজ এবং মজাদার ছিল। আমরা এখন বুঝতে পেরেছি কিভাবে সাইপ্রেস অ্যাসিঙ্ক্রোনাস কমান্ড কাজ করে। আসুন আমরা যেখানে সিঙ্ক এবং অ্যাসিঙ্ক কোড মিশ্রিত করার চেষ্টা করছি তার গভীরে ডুব দেই।

সাইপ্রাস সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস কমান্ড মেশানো

আমরা দেখেছি, সাইপ্রেস কমান্ডগুলি অসিঙ্ক্রোনাস। কোন সিঙ্ক্রোনাস কোড ইনজেকশন করার সময়, সাইপ্রেস সিঙ্ক কোডটি কার্যকর হওয়ার জন্য অপেক্ষা করে না; অতএব সিঙ্ক কমান্ডগুলি আগে চালানো হয় এমনকি কোন পূর্ববর্তী সাইপ্রেস কমান্ডের জন্য অপেক্ষা না করেও। আসুন আরও ভালভাবে বুঝতে একটি সংক্ষিপ্ত উদাহরণ দেখি।

 এটি('টেকনোলজি ইউআরএলে নেভিগেট করতে প্রযুক্তি বিকল্পে ক্লিক করুন', ফাংশন () { cy.visit('https://lambdageeks.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') // না, কিছুই না। console.log("এটি লগ চেক করতে হয়") // অ্যাসিঙ্ক আচরণ পরীক্ষা করতে লগ করুন }); });
লগ কমান্ডের সিঙ্ক্রোনাস এক্সিকিউশন

কোডের শেষে লগ যোগ করা হয়, যা একটি সিঙ্ক কমান্ড। যখন আমরা পরীক্ষা চালাই, আপনি দেখতে পারেন যে পৃষ্ঠাটি লোড হওয়ার আগেই লগটি মুদ্রিত হয়েছে। এইভাবে, সাইপ্রেস সিঙ্ক্রোনাস কমান্ডের জন্য অপেক্ষা করে না এবং তার কমান্ডগুলি কার্যকর করার আগেও এটি চালায়।

যদি আমরা তাদের প্রত্যাশা অনুযায়ী কার্যকর করতে চাই, তাহলে আমাদের এটিকে ভিতরে মোড়ানো উচিত .then() ফাংশন আসুন একটি উদাহরণ দিয়ে বুঝতে পারি।

এটি('টেকনোলজি ইউআরএলে নেভিগেট করতে প্রযুক্তি বিকল্পে ক্লিক করুন', ফাংশন () { cy.visit('https://lambdageeks.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') // না, কিছুই না। .then() => { console.log("এটি লগ চেক করতে হয়") // অ্যাসিঙ্ক আচরণ পরীক্ষা করতে লগ করুন }); });
.Then () কমান্ড দিয়ে Async এক্সিকিউশন

সাইপ্রাস প্রতিশ্রুতি কি?

আমরা উপরে দেখেছি, সাইপ্রেস কার্যকর করার আগে সমস্ত কমান্ডকে এনকিউ করে। বিস্তারিতভাবে রিপ্রেস করার জন্য, আমরা এটি বলতে পারি সাইপ্রাস প্রতিশ্রুতির শৃঙ্খলে প্রতিশ্রুতি (আদেশ) যুক্ত করে। সাইপ্রেস একটি শৃঙ্খলে প্রতিশ্রুতি হিসাবে সমস্ত আদেশের যোগফল দেয়।

প্রতিশ্রুতিগুলি বুঝতে, তাদের বাস্তব জীবনের দৃশ্যের সাথে তুলনা করুন। ব্যাখ্যাটি অসিঙ্ক্রোনাস প্রকৃতির প্রতিশ্রুতিকেও সংজ্ঞায়িত করে। যদি কেউ আপনাকে প্রতিশ্রুতি দেয়, তারা হয় প্রত্যাখ্যান or মেটান তারা যে বিবৃতি দিয়েছে। একইভাবে, অসিঙ্ক্রোনাসে, হয় প্রতিশ্রুতি প্রত্যাখ্যান or মেটান কোড আমরা একটি প্রতিশ্রুতি মোড়ানো।

যাইহোক, সাইপ্রাস সমস্ত প্রতিশ্রুতির যত্ন নেয়, এবং আমাদের কাস্টম কোড দিয়ে সেগুলি চালানো অপ্রয়োজনীয়। একটি জাভাস্ক্রিপ্ট প্রোগ্রামার হিসাবে, আমরা ব্যবহার সম্পর্কে কৌতূহল পেতে অ্যাওয়েট্সওয়াচমেন আমাদের আদেশে। সাইপ্রাস এপিআইগুলি আমরা সাধারণত যেভাবে ব্যবহার করি তার থেকে সম্পূর্ণ আলাদা। আমরা এই টিউটোরিয়ালের পরবর্তী অংশ গভীরভাবে বিবেচনা করব।

সাইপ্রাস রাজ্য প্রতিশ্রুতি

সাইপ্রাস কমান্ডের উপর ভিত্তি করে প্রতিশ্রুতির তিনটি ভিন্ন অবস্থা রয়েছে। তারা হল

  • স্থিরপ্রতিজ্ঞ - যখন পদক্ষেপ/ কমান্ড সফলভাবে কার্যকর করা হয় তখন ঘটে।
  • বিচারাধীন - যেখানে মৃত্যুদন্ড শুরু হয়েছে তা বলুন, কিন্তু ফলাফল অনিশ্চিত।
  • প্রত্যাখ্যান - ধাপটি ব্যর্থ হলে ঘটে।

একটি জাভাস্ক্রিপ্ট প্রোগ্রামার হিসাবে, আমরা আমাদের কোডে প্রতিশ্রুতি লিখি এবং সেগুলি ফিরিয়ে দেই। উদাহরণ স্বরূপ,

//এই কোডটি শুধুমাত্র প্রদর্শনের বর্ণনার জন্য ('সাইপ্রেস উদাহরণ', ফাংশন () { এটি ('টেকনোলজি ইউআরএলে নেভিগেট করতে প্রযুক্তি বিকল্পে ক্লিক করুন', ফাংশন () { cy.visit('https://lambdageeks)। com/') //প্রযুক্তি বিকল্প cy.get('.fl-node-5f05604c3188e > .fl-col-content > .fl-module > .fl-module-content > .fl-photo > .fl-টিতে ক্লিক করুন। photo-content > a > .fl-photo-img') .then() => { cy.click(); }) cy.url() .then() => { ফেরত cy.should(' অন্তর্ভুক্ত', '/প্রযুক্তি') }) }); });

এখানে, আমরা প্রতিটি কমান্ডের প্রতিশ্রুতি ফিরিয়ে দিচ্ছি। সাইপ্রাসে এর প্রয়োজন নেই। সৌভাগ্যবশত, সাইপ্রাস অভ্যন্তরীণভাবে সমস্ত প্রতিশ্রুতিগুলির যত্ন নেয় এবং আমাদের প্রতিটি পদক্ষেপে প্রতিশ্রুতি যুক্ত করার দরকার নেই। সাইপ্রেস আছে পুনরায় চেষ্টা করার ক্ষমতা বিকল্প, যেখানে এটি কমান্ড চালানোর জন্য একটি নির্দিষ্ট সময়ের জন্য পুনরায় চেষ্টা করে। আমরা ম্যানুয়ালি প্রতিশ্রুতি না দিয়ে একটি কোডের উদাহরণ দেখতে পাব।

    এটি('টেকনোলজি ইউআরএলে নেভিগেট করতে প্রযুক্তি বিকল্পে ক্লিক করুন', ফাংশন () { cy.visit('https://lambdageeks.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(). উচিত('অন্তর্ভুক্ত', '/প্রযুক্তি') }); });
সাইপ্রাস অভ্যন্তরীণভাবে পরিচালিত প্রতিশ্রুতি দিয়ে আদেশ দেয়

উপরের কোডটি আনাড়ি নয় এবং পড়া এবং বোঝা সহজ। সাইপ্রাস সমস্ত প্রতিশ্রুতি কাজ পরিচালনা করে, এবং এটি ব্যবহারকারীর থেকে লুকিয়ে থাকে। সুতরাং আমাদের কোথাও প্রতিশ্রুতিগুলি পরিচালনা বা ফেরত দেওয়ার বিষয়ে চিন্তা করতে হবে না!

সাইপ্রাসে ওয়েট কিভাবে ব্যবহার করবেন?

উপরে আলোচিত হিসাবে, সাইপ্রেস এর একটি কমান্ড সারি তৈরি করে এবং সেগুলি ক্রম অনুসারে অ্যাসিঙ্ক্রোনাস কোড পরিচালনা করার উপায় রয়েছে। যোগ করা হচ্ছে awaits কমান্ডগুলি প্রত্যাশিতভাবে কাজ করবে না। যেহেতু সাইপ্রেস অভ্যন্তরীণভাবে সবকিছু পরিচালনা করছে, তাই আমি যোগ না করার পরামর্শ দেব awaits কোডে।

আপনার যদি প্রতীক্ষা যোগ করার প্রয়োজন হয়, আপনি একটি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করতে পারেন সাইপ্রাস-প্রতিজ্ঞা যে সাইপ্রাস কিভাবে কাজ করে তা পরিবর্তন করে। এই লাইব্রেরি আপনাকে ব্যবহার করতে দেবে প্রতিশ্রুতি কমান্ডে, এবং ব্যবহার করুন অপেক্ষায় রয়েছেন কোডে

আসুন আমরা প্রতীক্ষাগুলি ব্যবহার করার উপায়গুলি এবং কীভাবে সেগুলি ব্যবহার না করি তা বুঝতে পারি।

আপনি এই মত অপেক্ষা ব্যবহার করা উচিত নয়

//এইভাবে await ব্যবহার করবেন না describe('পৃষ্ঠাটি দেখুন', () => { (async () => { cy.visit('https://lambdageeks.com/') await cy.url()। উচিত('অন্তর্ভুক্ত', '/প্রযুক্তি'); })() })

পরিবর্তে, আপনি এই মত ব্যবহার করতে পারেন

বর্ণনা করুন('পৃষ্ঠাটি দেখুন', () => { cy.visit('https://lambdageeks.com/').তারপর(async() => cy.url().should('include',') অপেক্ষা করুন /প্রযুক্তি') ()) })

এটি যে কোন সাইপ্রেস কমান্ডের জন্য কাজ করবে।

সাইপ্রেস মোড়ানো

wrap() সাইপ্রাসে একটি ফাংশন যা যুক্তি হিসাবে পাস করা যে কোনও বস্তু উত্পাদন করে।

বাক্য গঠন

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

আসুন কিভাবে অ্যাক্সেস করা যায় তার একটি উদাহরণ দেখি wrap() আমাদের কোডে।

const getName = () => { রিটার্ন 'Horse' } cy.wrap({ name: getName }).invoke('name').should('eq', 'Horse') // true

উদাহরণে, আমরা getName এবং তারপর এটি জন্য নাম আহ্বান।

সাইপ্রাস মোড়ানো প্রতিশ্রুতি

আমরা কোড দ্বারা ফেরত যে প্রতিশ্রুতি মোড়ানো করতে পারেন। কমান্ডগুলি ফলিত মান অ্যাক্সেস করার আগে প্রতিশ্রুতি সমাধানের জন্য অপেক্ষা করবে এবং। তারপর পরবর্তী কমান্ড বা দাবির জন্য এগিয়ে যান।

const customPromise = new প্রতিশ্রুতি((resolve, reject) => { // আমরা async কোড অ্যাক্সেস করতে setTimeout() ফাংশন ব্যবহার করি। setTimeout(() => { resolution({ type: 'success', বার্তা: 'Apples and Oranges' , }) }, 2500) }) এটি('প্রতিশ্রুতি সমাধানের জন্য অপেক্ষা করা উচিত', () => { 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'

এই লাইব্রেরির সাহায্যে, আপনি স্থানীয় সাইপ্রাস প্রতিশ্রুতি তৈরি এবং ওভাররাইড করতে পারেন এবং কোডে awaits এবং async ব্যবহার করতে পারেন। আপনি সঙ্গে প্রতিশ্রুতি অ্যাক্সেস করা উচিত promisify কীওয়ার্ড আসুন আমরা এর জন্য একটি উদাহরণ দেখি।

'সাইপ্রেস-প্রমিস' থেকে প্রতিশ্রুতি আমদানি করুন এটি('অ্যাসিঙ্ক/অপেক্ষা করে পরীক্ষা চালানো উচিত', অ্যাসিঙ্ক () => { const apple = await promisify(cy.wrap('apple')) const কমলা = await promisify(cy.wrap ('কমলা')) expect(apple).to.equal('apple') expect(oranges).to.equal('oranges') });
সাইপ্রাস-প্রতিশ্রুতিতে প্রতিশ্রুতি দিন

এটি শেখার জন্য খুব সহজ এবং মজাদার ছিল! এইভাবে, আপনি সাইপ্রাসে অ্যাসিঙ্ক্রোনাস কোড বরাদ্দ করতে পারেন।

সাইপ্রাস অ্যাসিঙ্ক টাস্ক

task() সাইপ্রাসের একটি ফাংশন যা নোডে কোড চালায়। এই কমান্ডটি আপনাকে ব্রাউজার থেকে নোডে স্যুইচ করতে এবং কোডে ফলাফল ফেরত দেওয়ার আগে নোডে কমান্ড চালানোর অনুমতি দেয়।

বাক্য গঠন

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

task() একটি মান বা প্রতিশ্রুতি প্রদান করে। task() প্রতিশ্রুতি ফেরত দিলে ব্যর্থ হবে undefined। এইভাবে, এটি ব্যবহারকারীকে টাইপোস ক্যাপচার করতে সাহায্য করে যেখানে ইভেন্টটি কিছু পরিস্থিতিতে পরিচালিত হয় না। যদি আপনার কোন মান ফেরত দেওয়ার প্রয়োজন না হয়, তাহলে পাস করুন null মান।

সচরাচর জিজ্ঞাস্য

সাইপ্রেস কি সিঙ্ক্রোনাস নাকি অ্যাসিঙ্ক্রোনাস?

সাইপ্রেস হল অসমনিয়ত কমান্ডগুলি কার্যকর করার জন্য অপেক্ষা করার পরিবর্তে সারিবদ্ধ কমান্ডগুলি ফেরত দিয়ে। যদিও এটি অসিঙ্ক্রোনাস, এটি এখনও সমস্ত পরীক্ষার ধাপগুলি ক্রমানুসারে চালায়। সাইপ্রাস ইঞ্জিন এই সমস্ত আচরণ পরিচালনা করে।

সাইপ্রাসে কি প্রতিশ্রুতি চেইন ধরা সম্ভব?

সাইপ্রাস এমনভাবে ডিজাইন করা হয়েছে যে আমরা প্রতিশ্রুতিগুলি ধরতে পারব না। এই আদেশগুলি ঠিক প্রতিশ্রুতি নয়, তবে এটি একটি প্রতিশ্রুতির মতো দেখাচ্ছে। এইভাবে, আমরা যেমন স্পষ্ট হ্যান্ডলার যোগ করতে পারি না catch.

উপরে যান