সবাইকে অভিবাদন!
আমি আমার ছাত্র এবং শিক্ষকদের দ্বারা এই নিবন্ধটি লিখতে অনুপ্রাণিত হয়েছিলাম। আমি প্রায়শই সুপারিশ করি যে তারা জাভাস্ক্রিপ্টে পরীক্ষা অটোমেশন প্রক্রিয়ার সাথে স্বাচ্ছন্দ্য বোধ করার সাথে সাথে টাইপস্ক্রিপ্ট শিখবে। আসুন দেখি REST API পরীক্ষার পরিপ্রেক্ষিতে আপনার পরীক্ষার অটোমেশন কাঠামোতে টাইপস্ক্রিপ্ট ব্যবহার করার বৈশিষ্ট্যগুলি কী কী…
আপনি এখানে একটি পরীক্ষা প্রকল্পের সম্পূর্ণ কোড খুঁজে পেতে পারেন।
আসুন টাইপস্ক্রিপ্ট কী এবং এটি জাভাস্ক্রিপ্টের চেয়ে কীভাবে আলাদা সে সম্পর্কে খুব বেশি গভীরে না যাই এবং গুরুত্বপূর্ণ জিনিসটি বর্ণনা করি -
TypeScript একটি Node.js প্যাকেজ হিসাবে উপস্থাপন করা হয়েছে, তাই আমি কিছু দুর্দান্ত বৈশিষ্ট্য সহ এটিকে জাভাস্ক্রিপ্ট হিসাবে দেখি।
ভাষা সম্পর্কে আরও জানতে এবং এটি কী অফার করে - দয়া করে অফিসিয়াল ওয়েবসাইটে যান যখন আমরা পরীক্ষা অটোমেশনের ক্ষেত্রে এর বৈশিষ্ট্যগুলি সম্পর্কে কথা বলতে যাচ্ছি…
আসুন TypeScript- এ পরীক্ষা অটোমেশন প্রকল্প তৈরির প্রক্রিয়ার মধ্য দিয়ে যাওয়া যাক:
একটি Node.js প্রকল্প তৈরি করুন।
npm init -y
TypeScript প্যাকেজ ইনস্টল করুন।
npm i typescript
প্রকল্পের জন্য একটি ডিফল্ট টাইপস্ক্রিপ্ট কনফিগারেশন তৈরি করুন - tsconfig.json
।
npx tsc --init
উপরের কমান্ডটি একটি ডিফল্ট কনফিগারেশন ফাইল তৈরি করবে, তবে আমি এটিকে এরকম কিছুতে ছোট করার পরামর্শ দিচ্ছি:
{ "compilerOptions": { "baseUrl": "./", "module": "esnext", "target": "esnext", "sourceMap": false, "moduleResolution": "node", "allowJs": true, "skipLibCheck": true, "resolveJsonModule": true, "allowSyntheticDefaultImports": true, "paths": { "*": ["./*"] } } }
এই কনফিগারেশনে প্রয়োজনীয় ন্যূনতম রয়েছে:
আপনি অফিসিয়াল ডকুমেন্টেশন ব্যবহার করে আপনার কনফিগারেশন প্রসারিত করতে পারেন।
আপনি Node.js ইকোসিস্টেমের অফার করা যেকোন টুল ব্যবহার করতে পারেন, কিন্তু আমার অভিজ্ঞতায় - TypeScript-এর সাথে কাজ করা বেশিরভাগ প্রকৌশলী কয়েকটি ভাল কারণে জেস্ট বেছে নেন:
পূর্বে, আমি প্রকল্পের মূল সেট আপ করার জন্য Mocha + Chai ব্যবহার করে মজা পেয়েছি, কিন্তু এখন আমি জেস্টের সাথেও লেগে আছি, কারণ এতে একটি টেস্ট রানার এবং অ্যাসারশন লাইব্রেরি উভয়ই রয়েছে।
Axios সবচেয়ে জনপ্রিয় HTTP ক্লায়েন্ট বলে মনে হচ্ছে, তাই আমি এটিও আপনার বাছাই করার পরামর্শ দিই।
বলতে পারি না যে আপনি আপনার সেটআপের জন্য এটি ব্যবহার করতে বাধ্য হয়েছেন, তবে আমি বলছি যে আপনি যখন প্রকল্পগুলি দেখেন তখন এটি স্বাভাবিক জিনিস।
এখন, এই প্যাকেজগুলিকে নির্ভরতা হিসাবে ইনস্টল করুন:
npm i jest axios
কিছু প্যাকেজ (যেমন Axios ) এর ভিতরে TypeScript প্রকার থাকে, কিন্তু জেস্ট এবং মোচা নেই। এছাড়াও, Jest-এর সঠিকভাবে কাজ করার জন্য @types/jest- এর সাথে একটি ts-jest প্যাকেজের প্রয়োজন - প্রথমটি TypeScript বৈশিষ্ট্যগুলি সক্ষম করে এবং দ্বিতীয়টি আপনাকে IntelliSense ব্যবহার করতে দেয়।
তাই মনে রাখবেন - আপনি যখন কিছু প্যাকেজ ব্যবহার করার চেষ্টা করছেন তখন যদি আপনার স্বয়ংসম্পূর্ণ বৈশিষ্ট্য না থাকে - আপনি সম্ভবত টাইপ ঘোষণা অনুপস্থিত করছেন।
এর পাশাপাশি টাইপস্ক্রিপ্ট -সম্পর্কিত এক্সটেনশন (প্যাকেজ) ইনস্টল করা যাক:
npm i ts-jest @types/jest
জেস্টের জন্য একটি ts-jest কনফিগার প্রিসেট প্রয়োজন, তাই আপনাকে অবশ্যই এটি আপনার কনফিগারে (বা package.json ) ফাইলে ঘোষণা করতে হবে:
{ "jest": { "preset": "ts-jest" } }
আপনি যদি একটি প্রকল্পের মধ্যে পরম পথ ব্যবহার করার পরিকল্পনা করছেন, তাহলে আপনাকে আপনার কনফিগারেশনও সামঞ্জস্য করতে হবে:
{ "jest": { "preset": "ts-jest", "moduleDirectories": [ "node_modules", "<rootDir>" ] } }
এই কনফিগারেশন আপনাকে একটি সাধারণ কমান্ড দিয়ে পরীক্ষা চালানোর অনুমতি দেয়... jest
সুতরাং, package.json- এ আপনার পরীক্ষার স্ক্রিপ্ট কনফিগার করুন:
{ "scripts": { "test": "jest" } }
এবং তারপরে npm test
বা npm run test
কমান্ডের সাহায্যে যেকোনো সময় আপনার পরীক্ষা চালান।
আমি আপনাকে একটি জেস্ট রানার এক্সটেনশন ইনস্টল করার পরামর্শ দিচ্ছি যদি আপনি একজন ভিজ্যুয়াল স্টুডিও কোড ব্যবহারকারী হন - এটি আপনাকে শুধুমাত্র একটি ক্লিকে পছন্দসই পরীক্ষা/স্যুটগুলি চালানো / ডিবাগ করতে দেয়। ওয়েবস্টর্মে, এটি একটি অন্তর্নির্মিত বৈশিষ্ট্য।
REST API পরীক্ষায় টাইপস্ক্রিপ্ট যে প্রধান বৈশিষ্ট্যটি প্রবর্তন করে তা হল...
আপনি আপনার অনুরোধ এবং প্রতিক্রিয়া বডি কেমন হওয়া উচিত তা ঘোষণা করতে পারেন, যেমন,
একটি উদাহরণ হিসাবে একটি Paysis সার্ভার নেওয়া যাক - আমরা একটি প্রকার হিসাবে /auth
এন্ডপয়েন্টের জন্য এটির অনুরোধ বডি পেলোড লিখতে পারি:
export type AuthRequestBody = { login: string password: string }
এবং প্রতিক্রিয়া বডির জন্য একই - আমাদের অনুরোধে কী সার্ভার পাঠাতে হবে:
export type AuthResponseBody = { token?: string message?: string }
যেহেতু সাফল্য/ব্যর্থতার পরিস্থিতির জন্য একটি ভিন্ন পেলোড থাকবে - আপনি " ?" এর মাধ্যমে কীগুলিকে "ঐচ্ছিক" হিসাবে চিহ্নিত করতে পারেন চরিত্র
একবার এটি হয়ে গেলে - আপনি আপনার পরীক্ষায় অনুরোধ এবং যাচাইকরণ রচনা করতে এই ধরনের ব্যবহার করতে পারেন...
Axios- এ, আপনি অনুরোধ কনফিগারেশনের মাধ্যমে কোন বডি পাঠাচ্ছেন তা বলতে পারেন:
const payload: AxiosRequestConfig<AuthRequestBody> = { method: 'post', url: '/auth', data: { login: process.env.USERNAME, password: process.env.PASSWORD, }, }
AxiosRequestConfig<AuthRequestBody>
-এ AuthRequestBody
মানে ঠিক এটাই ☝️
এর মানে হল আপনি পেলোড ব্যবহার করতে বাধ্য হবেন যা data
অবজেক্টে প্রদত্ত প্রকার AuthRequestBody
এর সাথে মেলে। আপনি যদি কিছু প্রয়োজনীয় ক্ষেত্র সেট করতে ভুলে যান বা কিছু অত্যধিক সেট করতে - আপনি একটি ত্রুটি দেখতে পাবেন৷
একই জিনিস প্রতিক্রিয়া সম্পর্কেও করা যেতে পারে:
const response: AxiosResponse<AuthResponseBody> = await client.request(payload)
এটি response.data
অবজেক্টে স্বয়ংসম্পূর্ণ যোগ করবে, যাতে আপনি response.data.token
বা response.data.message
ক্ষেত্রগুলিতে পৌঁছতে সক্ষম হবেন।
উপরের সাধারণ জিনিসগুলি ছাড়াও, আপনার কাস্টম প্রকারগুলি থেকে একটি JSON স্কিমা তৈরি করাও সম্ভব। এটি আপনাকে একটি রেসপন্স বডিতে প্রতিটি একক কী চেক করতে দেয় না যে এটি স্কিমার সাথে মেলে কিনা তবে পুরো পেলোডটি পরীক্ষা করে দেখুন ৷
তাই ধারণা হল:
বেশ চমৎকার জিনিস, কিন্তু মনে রাখবেন যে এই পরিবর্তনের পরে আপনার পরীক্ষাগুলি অস্পষ্ট হয়ে উঠতে পারে - এটি ঘটে যখন কিছু অতিরিক্ত ক্ষেত্র উপস্থিত হয়, তাই আপনাকে নিয়মিত স্কিমা আপডেট করতে হবে।
টাইপস্ক্রিপ্ট সেটআপ কঠিন হতে পারে, বিশেষ করে যদি এটি আপনার প্রথমবার হয় তবে এটি মূল্যবান!
আপনি যদি আপনার ইনপুট এবং আউটপুট ডেটা প্রকারের সাথে কভার করেন - আপনি এই অবজেক্টগুলিকে পার্স করার সময় টাইপো বা অন্য কোনো সিনট্যাক্স ত্রুটি করার কোনো উপায় নেই৷ এটি আপনাকে সাধারণ ভুল থেকে বাঁচায় এবং আপনাকে আপনার কোডে আপনার অনুরোধের গঠন দেখতে দেয়, তাই আপনাকে কোনো HTTP সংগ্রহ (যেমন পোস্টম্যান ) খুলতে হবে না এবং এটি কোন বডি অনুরোধ/প্রতিক্রিয়া দেয় তা দেখার জন্য আপনার প্রয়োজনীয় অনুরোধটি সন্ধান করতে হবে। সঙ্গে.
আমাকে আপনার অভিজ্ঞতা এবং আপনি এটি সম্পর্কে কি মনে করেন সম্পর্কে জানান.