paint-brush
জেসমিন: বিশুদ্ধ ফাংশন এবং প্রাথমিক পরীক্ষাগুলির উপর একটি শিক্ষানবিস-বান্ধব গাইডদ্বারা@marcinwosinek
200 পড়া

জেসমিন: বিশুদ্ধ ফাংশন এবং প্রাথমিক পরীক্ষাগুলির উপর একটি শিক্ষানবিস-বান্ধব গাইড

দ্বারা Marcin Wosinek6m2024/02/11
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

বিশুদ্ধ ফাংশন ইউনিট পরীক্ষার জন্য নিখুঁত কেস. একটি প্রদত্ত ইনপুটের জন্য, আমরা সবসময় একই আউটপুট আশা করি—কোন অভ্যন্তরীণ অবস্থা জড়িত নেই। আসুন কয়েকটি উদাহরণ এবং কিছু সাধারণ পরীক্ষার দিকে তাকাই যা পরীক্ষা করে দেখুন পদ্ধতিগুলি প্রত্যাশিত হিসাবে কাজ করে কিনা।
featured image - জেসমিন: বিশুদ্ধ ফাংশন এবং প্রাথমিক পরীক্ষাগুলির উপর একটি শিক্ষানবিস-বান্ধব গাইড
Marcin Wosinek HackerNoon profile picture

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

জুঁই

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

শুভ পথ পরীক্ষা

হ্যাপি পাথ টেস্টিং হল যখন আমরা ইনপুট সহ একটি পদ্ধতি পরীক্ষা করি যে এটি স্বাভাবিকভাবে কাজ করবে বলে আশা করা হয়। যুক্তিগুলি বৈধ এবং যুক্তিসঙ্গত সীমার মধ্যে। এই পরীক্ষাগুলি পরীক্ষা করে যে পদ্ধতিটি সঠিকভাবে তার কাজ করে কিনা - পরীক্ষার ক্ষেত্রেগুলি তার ডকুমেন্টেশনে পদ্ধতিটি কীভাবে ব্যাখ্যা করা হয়েছে তার সরল উদাহরণ হওয়া উচিত।


সিউডোকোড উদাহরণ:

  • expect(add(2, 2)).toBe(4) ,


  • expect(concatenate(“Lorem”, “Ipsum”)).toBe(“LoremIpsum”)


এই পরীক্ষাগুলি স্বয়ংক্রিয়ভাবে এটিকে ধরতে বোঝানো হয় যে কোনও সময় পদ্ধতি কী আচরণটি ভেঙে যায়।

পদ্ধতি

আসুন কয়েকটি সহজ পদ্ধতি দেখি: কিছু বাস্তব-বিশ্বের অ্যাপ্লিকেশনে আমাদের প্রয়োজন হতে পারে এমন সাধারণ অপারেশন।


সমস্ত বাস্তবায়ন ব্যাপকভাবে সরলীকৃত - সমস্ত পদ্ধতি একটি কুৎসিত উপায়ে ভেঙ্গে যাবে যদি শুধুমাত্র আমরা তাদের পরামিতি প্রদান করি যা প্রত্যাশিত থেকে সামান্য ভিন্ন। কোডটি শক্তিশালী হওয়া থেকে অনেক দূরে।

অভিবাদন

পদ্ধতি যা ব্যবহারকারীকে তাদের নাম এবং উপাধি দিয়ে শুভেচ্ছা জানায়:

 export function greet(name, surname) { return `Hello ${name} ${surname}!`; }

সংক্ষিপ্ত তারিখ

shortDate হল একটি ফর্ম্যাটিং পদ্ধতি যা একটি তারিখ অবজেক্ট নেয় এবং এটিকে একটি ছোট স্ট্রিং হিসাবে ফর্ম্যাট করে ফেরত দেয়। কোড:

 export function shortDate(date) { return date.toISOString().substring(0, 10); }

উপবৃত্তাকার

ellipsis একটি দীর্ঘ পাঠ্য স্ট্রিং এবং একটি ঐচ্ছিক দৈর্ঘ্যের প্যারামিটার নেয় এবং তারপর সীমার মধ্যে ফিট করার জন্য স্ট্রিংটিকে ছাঁটাই করে:

 export function ellipsis(text, length = 50) { if (text.length > length) { return text.substring(0, length) + "…"; } return text; }

অনুবাদ করা

একটি পদ্ধতি যা একটি key এবং lang জোড়ার জন্য অনুবাদিত স্ট্রিং মান প্রদান করে। এটি আরও উন্নত অনুবাদের লাইব্রেরি দিয়ে কী প্রতিস্থাপন করা যেতে পারে তার একটি সরলীকৃত বাস্তবায়ন।

 export function translate(key, lang = "en") { switch (lang) { case "en": switch (key) { case "hello": return "Hello!"; } case "pl": switch (key) { case "hello": return "Cześć!"; } } }

ডিসকাউন্ট প্রয়োগ করুন

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

 export function applyDiscount(price, discountPercentage) { return price - (price * discountPercentage) / 100; }

মূল্য গণনা করুন

একটি নির্দিষ্ট মূল্যে একাধিক ইউনিট কেনার সময় এটি মোট মূল্য গণনা করে। আকর্ষণীয় প্রান্তের ক্ষেত্রে যোগ করার পরে এটি আরও জটিল হয়ে উঠবে।

 export function calculatePrice(unitPrice, quantity) { return unitPrice * quantity; }

JS কোড সম্পূর্ণ করুন

সম্পূর্ণ JS কোড, src/main.js :

 export function greet(name, surname) { return `Hello ${name} ${surname}!`; } export function shortDate(date) { return date.toISOString().substring(0, 10); } export function ellipsis(text, length = 50) { if (text.length > length) { return text.substring(0, length) + "…"; } return text; } export function translate(key, lang = "en") { switch (lang) { case "en": switch (key) { case "hello": return "Hello!"; } case "pl": switch (key) { case "hello": return "Cześć!"; } } } export function applyDiscount(price, discountPercentage) { return price - (price * discountPercentage) / 100; } export function calculatePrice(unitPrice, quantity) { return unitPrice * quantity; }

জুঁই টেস্ট যোগ করা হচ্ছে

জেসমিন যোগ করতে, আসুন ফোল্ডারটিকে একটি এনপিএম প্যাকেজে রূপান্তর করে শুরু করি:

 $ npm init -y Wrote to …/package.json: …


তারপরে আমরা জেসমিন প্যাকেজটি ইনস্টল করতে পারি:

 $ npm install --save-dev jasmine added 42 packages, and audited 43 packages in 2s 13 packages are looking for funding run `npm fund` for details found 0 vulnerabilities


তারপর আমরা জেসমিন দ্বারা ব্যবহৃত ফোল্ডার এবং ফাইল তৈরি করতে পারি:

 $ npx jasmine init (no output)


এই কমান্ড নিম্নলিখিত উৎপন্ন করে:

  • spec/ —একটি ফোল্ডার যেখানে আমরা পরীক্ষা সহ *.spec.js ফাইল রাখতে পারি, এবং


  • spec/support/jasmine.json — জেসমিন কনফিগারেশন সহ একটি ফাইল।

ইউনিট পরীক্ষা

নিম্নলিখিত ইউনিট পরীক্ষার জন্য, আমি শুধুমাত্র সুখী পথের উপর ফোকাস করছি—আমি পরীক্ষা করি যে ফলাফলটি যুক্তিসঙ্গত ইনপুটগুলির জন্য আশানুরূপ কিনা। পরীক্ষাটি স্ব-ব্যাখ্যামূলক হওয়া উচিত, তাই আসুন সেগুলি একবার দেখে নেওয়া যাক:

 import { greet, shortDate, ellipsis, translate, applyDiscount, calculatePrice, } from "../src/main.js"; describe("main", () => { describe("greet", () => { it("should greet by name and surname", () => { expect(greet("Lorem", "Ipsum")).toEqual("Hello Lorem Ipsum!"); }); }); describe("shortDate", () => { it("should format correclty date", () => { const date = new Date("2023-11-02"); expect(shortDate(date)).toEqual("2023-11-02"); }); }); describe("shortDate", () => { it("should shorten long text at 50 chars", () => { expect( ellipsis( "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a faucibus massa." ) ).toEqual("Lorem ipsum dolor sit amet, consectetur adipiscing…"); }); it("should leave short text unchanged", () => { expect(ellipsis("Lorem ipsum sin dolor")).toEqual( "Lorem ipsum sin dolor" ); }); it("should shorten to custom length", () => { expect(ellipsis("Lorem ipsum sin dolor", 10)).toEqual("Lorem ipsu…"); }); }); describe("translate", () => { it("should translate to supported langauges", () => { expect(translate("hello", "en")).toEqual("Hello!"); expect(translate("hello", "pl")).toEqual("Cześć!"); }); }); describe("applyDiscount", () => { it("should lower the price accordingly", () => { expect(applyDiscount(120, 25)).toEqual(90); expect(applyDiscount(8, 50)).toEqual(4); }); }); describe("calculatePrice", () => { it("should find a price of many products", () => { expect(calculatePrice(4, 3)).toEqual(12); expect(calculatePrice(9, 0.5)).toEqual(4.5); }); }); });

(ফাইল spec/main.spec.js )

চলমান টেস্ট

পরীক্ষা চালানোর জন্য, আমরা নিম্নলিখিত স্ক্রিপ্টটি package.json এ যোগ করতে পারি:

 .. "scripts": { "test": "jasmine" }, …


এটির সাথে, npm run test আমাদের পরীক্ষা চালায়:

 $ npm run test > [email protected] test > jasmine Randomized with seed 76873 Started ........ 8 specs, 0 failures Finished in 0.004 seconds Randomized with seed 76873 (jasmine --random=true --seed=76873)

সারসংক্ষেপ

এই পোস্টে, আমরা JS কোডের একটি সাধারণ উদাহরণ দেখেছি এবং কীভাবে এটি ইউনিট পরীক্ষা দ্বারা কভার করা যেতে পারে। আপনি GitHub এ সম্পূর্ণ কোড উদাহরণ খুঁজে পেতে পারেন।


এছাড়াও এখানে প্রকাশিত