Web Development Asynchronous Function এর জন্য টেস্টিং গাইড ও নোট

249

JasmineJS মূলত synchronous টেস্টিং এর জন্য তৈরি করা হলেও, আপনি asynchronous কোডের জন্যও টেস্ট তৈরি করতে পারেন। অনেক সময় আপনার কোডের মধ্যে API কল, টাইমআউট বা Promises থাকতে পারে, যা asynchronous ফাংশন হিসেবে কাজ করে। JasmineJS এ asynchronous কোড টেস্ট করার জন্য কিছু বিশেষ পদ্ধতি রয়েছে।


Asynchronous কোড টেস্ট করার উপায়

JasmineJS এ asynchronous টেস্ট করতে done() callback ফাংশন, async/await, এবং Promises ব্যবহৃত হয়। আপনি যেভাবে asynchronous কোড লিখেছেন, সেভাবেই JasmineJS এ টেস্ট করতে পারবেন।


1. done() Callback ব্যবহার

JasmineJS এ asynchronous টেস্ট করার সবচেয়ে পুরানো এবং সাধারণ পদ্ধতি হল done() callback ব্যবহার করা। এটি Jasmine কে জানায় যে, টেস্টের কাজ শেষ হলে টেস্টটি পাস বা ফেইল হবে।

উদাহরণ:

describe("Asynchronous Testing with done()", function() {
  it("should fetch data from API", function(done) {
    const fetchData = function(callback) {
      setTimeout(function() {
        callback("Data fetched");
      }, 1000);
    };

    fetchData(function(result) {
      expect(result).toBe("Data fetched");
      done();  // done() কল না করলে Jasmine এটি শেষ হবে না বলে মনে করবে
    });
  });
});

এখানে:

  • done() ফাংশনটি Jasmine কে জানায় যে টেস্টটি asynchronous এবং এটি শেষ হলে Jasmine টেস্ট ফলাফল যাচাই করবে।
  • setTimeout ব্যবহার করে আমরা ডিলেইড (delayed) asynchronous কোড সিমুলেট করেছি, এবং done() কলের মাধ্যমে Jasmine জানানো হয়েছে যে, টেস্ট শেষ হয়েছে।

2. async/await ব্যবহার

async/await এর মাধ্যমে আপনি asynchronous কোডকে আরো পড়তে সহজ এবং সুসংগতভাবে লিখতে পারেন। JasmineJS এই পদ্ধতিটি সাপোর্ট করে, এবং এটি promises এর উপর ভিত্তি করে কাজ করে।

উদাহরণ:

describe("Asynchronous Testing with async/await", function() {
  it("should fetch data from API", async function() {
    const fetchData = function() {
      return new Promise(function(resolve) {
        setTimeout(function() {
          resolve("Data fetched");
        }, 1000);
      });
    };

    const result = await fetchData();
    expect(result).toBe("Data fetched");
  });
});

এখানে:

  • async/await এর মাধ্যমে আপনি asynchronous ফাংশনকে অপেক্ষা (wait) করে নিতে পারেন। এটি কোডকে synchronous-এর মতো দেখতে এবং পড়তে সহজ করে তোলে।
  • fetchData() একটি promise ফেরত দেয়, এবং আমরা await ব্যবহার করে এর ফলাফলটি অপেক্ষা করে পাওয়ার পর expect() দিয়ে যাচাই করেছি।

3. Promise ব্যবহার

Promises ব্যবহার করেও asynchronous কোড টেস্ট করা সম্ভব। JasmineJS promises কে সরাসরি সমর্থন করে এবং আপনি একটি promise রিটার্ন করলে Jasmine তার উপর ভিত্তি করে টেস্ট সম্পূর্ণ করার আগ পর্যন্ত অপেক্ষা করে।

উদাহরণ:

describe("Asynchronous Testing with Promises", function() {
  it("should fetch data from API", function() {
    const fetchData = function() {
      return new Promise(function(resolve) {
        setTimeout(function() {
          resolve("Data fetched");
        }, 1000);
      });
    };

    return fetchData().then(function(result) {
      expect(result).toBe("Data fetched");
    });
  });
});

এখানে:

  • return এর মাধ্যমে আপনি Jasmine কে জানাচ্ছেন যে এটি একটি asynchronous টেস্ট এবং Jasmine সেই promise সম্পন্ন না হওয়া পর্যন্ত টেস্টটি শেষ হবে না।
  • then() এর মাধ্যমে promise এর রেজাল্ট হাতে পাওয়ার পর আমরা যাচাই করেছি।

4. done.fail() ব্যবহার

JasmineJS এ done.fail() ব্যবহার করা যায় যাতে asynchronous কোডের ক্ষেত্রে কোনো ত্রুটি ঘটলে টেস্টটি ব্যর্থ (fail) ঘোষণা করা হয়। এটি done() এর পরিবর্তে ব্যবহৃত হয় যখন আপনি asynchronous কোডের মধ্যে কোনো ত্রুটি দেখেন।

উদাহরণ:

describe("Asynchronous Testing with done.fail()", function() {
  it("should handle errors in asynchronous code", function(done) {
    const fetchData = function() {
      return new Promise(function(resolve, reject) {
        setTimeout(function() {
          reject("Data fetch failed");
        }, 1000);
      });
    };

    fetchData().then(function() {
      done();  // যদি ফাংশন সফল হয় তবে done() কল হবে
    }).catch(function(error) {
      done.fail(error);  // যদি কোনো ত্রুটি ঘটে তবে done.fail() কল হবে
    });
  });
});

এখানে:

  • done.fail() ব্যবহার করা হয়েছে ত্রুটি (error) ধরা হলে টেস্টটি ব্যর্থ করতে। এই পদ্ধতিতে আপনি যদি asynchronous কোডে কোনো সমস্যা বা ত্রুটি পান, তবে Jasmine এটি ধরবে এবং টেস্টকে ব্যর্থ ঘোষণা করবে।

5. beforeEach() এবং afterEach() এর সাথে Asynchronous কোড

আপনি যদি beforeEach() এবং afterEach() এর মধ্যে asynchronous কোড ব্যবহার করতে চান, তাহলে আপনি done(), async/await, অথবা Promises ব্যবহার করতে পারেন।

উদাহরণ:

describe("Asynchronous Testing with beforeEach()", function() {
  let data;

  beforeEach(function(done) {
    const fetchData = function() {
      return new Promise(function(resolve) {
        setTimeout(function() {
          resolve("Data fetched in beforeEach");
        }, 1000);
      });
    };

    fetchData().then(function(result) {
      data = result;
      done();  // done() কল করার মাধ্যমে Jasmine জানাবে যে beforeEach() শেষ হয়েছে
    });
  });

  it("should use data from beforeEach", function() {
    expect(data).toBe("Data fetched in beforeEach");
  });
});

এখানে:

  • beforeEach() এর মধ্যে asynchronous কোড ব্যবহার করা হয়েছে। done() ব্যবহার করে Jasmine এ জানানো হয়েছে যে টেস্ট সেটআপ শেষ হয়েছে।
  • it() ব্লকের মধ্যে আমরা data চেক করেছি যা beforeEach() এর মাধ্যমে সেট করা হয়েছে।

সারাংশ

JasmineJS এ asynchronous কোড টেস্ট করার জন্য বিভিন্ন পদ্ধতি রয়েছে:

  • done() callback ফাংশন: এটি Jasmine কে জানাতে সাহায্য করে যে asynchronous টেস্ট শেষ হয়েছে।
  • async/await: এটি asynchronous কোডকে আরও পড়তে সহজ এবং সুসংগত করে তোলে।
  • Promises: Jasmine promises কে সরাসরি সমর্থন করে, এবং আপনি return ব্যবহার করে Jasmine কে জানাতে পারেন যে এটি একটি asynchronous টেস্ট।
  • done.fail(): এটি asynchronous টেস্টে ত্রুটি (error) হলে টেস্টটি ব্যর্থ করতে ব্যবহৃত হয়।

এই পদ্ধতিগুলি ব্যবহার করে আপনি সহজেই asynchronous কোডের টেস্টিং করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...