JasmineJS এ complex asynchronous functions (জটিল অ্যাসিঙ্ক্রোনাস ফাংশন) টেস্ট করা একটু চ্যালেঞ্জিং হতে পারে, কারণ এতে একাধিক asynchronous অপারেশন বা প্রতিক্রিয়া (callback, promise, setTimeout, ইত্যাদি) থাকতে পারে। তবে JasmineJS এর বিভিন্ন টুলস এবং কৌশল ব্যবহার করে আপনি এসব ফাংশনের টেস্টিং সহজেই করতে পারেন। এখানে আমরা কিছু সাধারণ কৌশল দেখবো যার মাধ্যমে আপনি জটিল অ্যাসিঙ্ক্রোনাস ফাংশন টেস্ট করতে পারবেন।
Complex Asynchronous Function কি?
Complex Asynchronous Function বলতে এমন ফাংশন বোঝানো হয়, যা একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন বা কলব্যাকের সমন্বয়ে কাজ করে। উদাহরণস্বরূপ, কোনো API কল, সেটটাইমআউট (setTimeout), বা একাধিক প্রমিস (Promise) একত্রে ব্যবহার করে জটিল কার্যকলাপ সম্পন্ন হতে পারে।
যেহেতু JasmineJS অ্যাসিঙ্ক্রোনাস টেস্টিংয়ের জন্য done(), async/await, এবং promise সমর্থন করে, এইসব টুল ব্যবহার করে আমরা জটিল অ্যাসিঙ্ক্রোনাস ফাংশন সহজে টেস্ট করতে পারি।
Complex Asynchronous Function এর উদাহরণ
ধরা যাক, আমাদের একটি অ্যাসিঙ্ক্রোনাস ফাংশন আছে, যা প্রথমে একটি API কল করে, তারপর কিছু সময় পর একটি প্রক্রিয়া সম্পন্ন করে, এবং শেষে একটি callback ফাংশন কল করে।
function fetchDataAndProcess(callback) {
setTimeout(function() {
// প্রথমে কিছু ডেটা ফেচ করা হচ্ছে (এটা আসলে অ্যাসিঙ্ক্রোনাস হতে পারে)
const data = { id: 1, name: 'John Doe' };
// এরপর কিছু প্রসেসিং
const processedData = { ...data, status: 'Processed' };
// অবশেষে callback ফাংশন কল করা হচ্ছে
callback(processedData);
}, 1000);
}
এটি একটি complex asynchronous function, যেখানে একটি setTimeout দ্বারা একটি অ্যাসিঙ্ক্রোনাস কলব্যাক প্রক্রিয়া ব্যবহৃত হয়েছে।
JasmineJS তে Complex Asynchronous Function টেস্ট করা
জটিল অ্যাসিঙ্ক্রোনাস ফাংশন টেস্ট করতে, আপনি JasmineJS এর done() বা async/await ব্যবহার করতে পারেন। নিচে দুটি কৌশল দেখানো হলো:
done() Callback ব্যবহার করে টেস্ট
JasmineJS এ done() কলব্যাক ব্যবহার করে অ্যাসিঙ্ক্রোনাস কোডের শেষ হওয়া নিশ্চিত করা হয়। এটি সাধারণত ব্যবহার করা হয় যখন অ্যাসিঙ্ক্রোনাস কাজের ফলাফল পেতে কিছু সময় প্রয়োজন।
উদাহরণ: done() Callback ব্যবহার করে টেস্ট
describe("Complex Asynchronous Function", function() {
it("should process data after fetching", function(done) {
function callback(result) {
expect(result.status).toBe("Processed");
done(); // done() কল করা হয়েছে যাতে Jasmine জানে টেস্ট শেষ হয়েছে
}
fetchDataAndProcess(callback); // অ্যাসিঙ্ক্রোনাস ফাংশন কল
});
});
এখানে:
done()কল করা হচ্ছে ফাংশনের অ্যাসিঙ্ক্রোনাস কাজ শেষ হওয়ার পর।- JasmineJS অপেক্ষা করবে যতক্ষণ না
done()কল করা হয়, তারপর টেস্টটি সম্পন্ন হবে।
async/await ব্যবহার করে টেস্ট
যেহেতু Promises অ্যাসিঙ্ক্রোনাস কোডের জন্য একটি সাধারণ পদ্ধতি, আপনি async এবং await ব্যবহার করে প্রমিস ভিত্তিক অ্যাসিঙ্ক্রোনাস কোডের টেস্ট করতে পারেন। JasmineJS async/await এর সঙ্গে কাজ করে, যাতে কোডটি আরো পরিষ্কার এবং সহজ হয়।
উদাহরণ: async/await ব্যবহার করে টেস্ট
describe("Complex Asynchronous Function", function() {
it("should process data after fetching", async function() {
const result = await new Promise((resolve, reject) => {
fetchDataAndProcess(resolve); // প্রমিসের মাধ্যমে অ্যাসিঙ্ক্রোনাস কল
});
expect(result.status).toBe("Processed");
});
});
এখানে:
async:it()ব্লকটি অ্যাসিঙ্ক্রোনাস ফাংশন হিসেবে চিহ্নিত করা হয়েছে।await: প্রমিসটির ফলাফল পাওয়ার জন্যawaitব্যবহার করা হয়েছে।
এই পদ্ধতিতে, অ্যাসিঙ্ক্রোনাস ফাংশনের ফলাফল পাওয়ার জন্য কোনো done() কলব্যাকের প্রয়োজন নেই, কারণ await ফাংশনটি স্বয়ংক্রিয়ভাবে অপেক্ষা করবে প্রমিসের ফলাফলের জন্য।
Multiple Asynchronous Operations টেস্ট করা
কখনও কখনও আমাদের একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন থাকতে পারে, যা একে অপরের উপর নির্ভরশীল। এই ক্ষেত্রে, আপনাকে নিশ্চিত করতে হবে যে সমস্ত অপারেশন সঠিকভাবে সম্পন্ন হয়েছে এবং ফলাফলগুলি একসঙ্গে যাচাই করা হবে।
উদাহরণ: একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন টেস্ট করা
describe("Multiple Asynchronous Operations", function() {
it("should process all data correctly", async function() {
const result1 = await new Promise((resolve) => {
setTimeout(() => resolve("Data 1 processed"), 1000);
});
const result2 = await new Promise((resolve) => {
setTimeout(() => resolve("Data 2 processed"), 1500);
});
expect(result1).toBe("Data 1 processed");
expect(result2).toBe("Data 2 processed");
});
});
এখানে:
- দুইটি আলাদা অ্যাসিঙ্ক্রোনাস প্রমিসকে
awaitব্যবহার করে সিকোয়েন্সিয়ালি টেস্ট করা হয়েছে। - JasmineJS নিজে থেকে সব অ্যাসিঙ্ক্রোনাস অপারেশন সম্পন্ন হওয়ার পর টেস্টের ফলাফল যাচাই করবে।
Promise.all() ব্যবহার করে একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন টেস্ট করা
যদি একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন একসঙ্গে সম্পন্ন হওয়ার পরে তাদের ফলাফল পরীক্ষা করতে চান, তবে Promise.all() ব্যবহার করতে পারেন।
উদাহরণ: Promise.all() দিয়ে একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন টেস্ট
describe("Parallel Asynchronous Operations", function() {
it("should process all data in parallel", async function() {
const [result1, result2] = await Promise.all([
new Promise((resolve) => setTimeout(() => resolve("Data 1 processed"), 1000)),
new Promise((resolve) => setTimeout(() => resolve("Data 2 processed"), 500))
]);
expect(result1).toBe("Data 1 processed");
expect(result2).toBe("Data 2 processed");
});
});
এখানে:
Promise.all(): দুটি আলাদা অ্যাসিঙ্ক্রোনাস অপারেশন একসঙ্গে চলতে থাকে, এবং সেগুলির ফলাফল পাওয়ার পরawaitকরা হয়।- একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন সম্পন্ন হওয়ার পর তাদের ফলাফল যাচাই করা হয়।
সারাংশ
- Complex Asynchronous Functions টেস্ট করার জন্য JasmineJS এ
done()বাasync/awaitব্যবহার করা যায়। done()কলব্যাক অ্যাসিঙ্ক্রোনাস ফাংশনের শেষ হওয়ার পর টেস্ট সম্পন্ন করতে সাহায্য করে।async/awaitপদ্ধতি প্রমিস ভিত্তিক অ্যাসিঙ্ক্রোনাস ফাংশন টেস্ট করার জন্য একটি আধুনিক এবং সহজ পদ্ধতি।- একাধিক অ্যাসিঙ্ক্রোনাস অপারেশন টেস্ট করার জন্য
Promise.all()ব্যবহার করা যেতে পারে, যা অপারেশনগুলির সমান্তরালে কার্যকরী ফলাফল প্রাপ্তি নিশ্চিত করে।
JasmineJS এর এই টেস্টিং কৌশলগুলি আপনাকে জটিল অ্যাসিঙ্ক্রোনাস ফাংশন সহজভাবে পরীক্ষা করতে সহায়তা করবে।
Read more