কম্পিউটার টিউটোরিয়াল

Sinon.js কী এবং এর ব্যবহারিক প্রয়োগ?

Sinon.js: ইউনিট টেস্টের জন্য স্পাই, স্টাব এবং মক

Sinon.js একটি স্বতন্ত্র জাভাস্ক্রিপ্ট লাইব্রেরি যা ইউনিট টেস্টিং-এ টেস্ট ডাবলস (test doubles) তৈরি করার জন্য ব্যবহৃত হয়। এটি কোডের নির্দিষ্ট অংশকে আইসোলেট করে টেস্ট করার সুবিধা দেয়।

মূল তিনটি কম্পোনেন্ট

1. Spies (স্পাই)

  • নকল ফাংশন যা ফাংশন কল ট্র্যাক করে।
  • কল কতবার হয়েছে, কোন আর্গুমেন্ট দিয়ে কল হয়েছে, রিটার্ন মান কী ছিল — সব রেকর্ড রাখে।
  • মূল ফাংশনের আচরণ পরিবর্তন করে না।
const spy = sinon.spy(obj, 'method');
obj.method(1, 2);
console.log(spy.callCount); // 1
console.log(spy.args[0]);   // [1, 2]

2. Stubs (স্টাব)

  • ফাংশন সম্পূর্ণরূপে প্রতিস্থাপন করে।
  • নির্দিষ্ট রিটার্ন মান, এরর থ্রো, বা কাস্টম আচরণ ডিফাইন করা যায়।
  • বাহ্যিক নির্ভরতা (API কল, ডাটাবেস, টাইমার) মক করার জন্য আদর্শ।
const stub = sinon.stub(api, 'fetchUser').returns(Promise.resolve({id: 1, name: 'Test'}));

3. Mocks (মক)

  • অবজেক্টের পূর্ণ আচরণ সংজ্ঞায়িত করে (স্পাই + স্টাবের সংমিশ্রণ)।
  • এক্সপেক্টেশন সেট করা যায়: "এই ফাংশন একবার কল হবে এবং সফল হবে"।
  • টেস্ট শেষে mock.verify() দিয়ে যাচাই করা হয়।

কেন Sinon.js ব্যবহার করবেন?

  • টেস্ট দ্রুত, নির্ভরশীল এবং আইসোলেটেড হয়।
  • বাহ্যিক সার্ভিস (REST API, DB) ছাড়া টেস্ট করা যায়।
  • এজ কেস (এরর, টাইমআউট, নেটওয়ার্ক ফেইল) সিমুলেট করা সহজ।
  • প্রচলিত টেস্ট ফ্রেমওয়ার্ক (Mocha, Jest, Jasmine) এর সাথে খুব ভালো ইন্টিগ্রেট হয়।

উদাহরণ: API কল স্টাব করা

// টেস্ট ফাইলে
sinon.stub(window, 'fetch').resolves({
  ok: true,
  json: () => Promise.resolve({data: 'mocked'})
});

// প্রোডাকশন কোড変わらず
const response = await fetch('/api/data'); // মকড রেসপন্স मिलेगा

Sinon.js আধুনিক জাভাস্ক্রিপ্ট টেস্টিং-এর অপরিহার্য একটি টুল।

  1. PHP-তে ini_set() ফাংশনের ব্যবহার

  2. C#-তে yield return-এর ব্যবহার কী?

  3. C#-তে is কীওয়ার্ডের ব্যবহার

  4. C#-এ 'using' স্টেটমেন্টের ব্যবহার কী?