Asynchronous Code এর জন্য done() এর ব্যবহার

Testing Asynchronous Code এবং Ajax Requests - জ্যাসমিনজেএস (JasmineJS) - Web Development

250

JasmineJS সাধারণত সিঙ্ক্রোনাস টেস্টিং ফ্রেমওয়ার্ক হিসেবে কাজ করে, তবে অনেক সময় আপনি asynchronous code যেমন API কল, টাইমার, অথবা ডেটাবেজ অপারেশন পরীক্ষা করতে চাইলে এর জন্য done() ফাংশন ব্যবহার করতে হয়। done() ব্যবহৃত হয় Jasmine কে জানাতে যে একটি asynchronous টেস্ট কেস শেষ হয়েছে এবং Jasmine তার ফলাফল রিপোর্ট করতে পারে।


Asynchronous Test Cases

Asynchronous কোডে, টেস্ট কেসগুলি সিঙ্ক্রোনাস কোডের মতো সরাসরি রান হয় না। এ ক্ষেত্রে, JasmineJS কে সঠিক সময়ে টেস্টের ফলাফল জানাতে done() কল করতে হয়, যাতে Jasmine জানে কখন টেস্টের কার্যক্রম শেষ হয়েছে।


done() ফাংশন ব্যবহার

JasmineJS এ, আপনি যখন একটি asynchronous কাজ করেন (যেমন API কল, ডেটাবেজ অপারেশন, বা টাইমার), তখন আপনি done() ব্যবহার করতে পারেন। এটি একটি callback ফাংশন হিসেবে কাজ করে যা আপনাকে টেস্ট শেষ হওয়ার সংকেত দেয়।

done() এর কাঠামো:

it("should complete async operation", function(done) {
  // আপনার asynchronous কোড এখানে থাকবে
  someAsyncOperation(function() {
    // এই callback ফাংশনের মধ্যে done() কল করতে হবে
    done(); 
  });
});
  • done(): এটি Jasmine কে জানায় যে asynchronous টেস্টটি শেষ হয়েছে এবং Jasmine ফলাফল পরীক্ষা করতে পারে।

done() ব্যবহার করার উদাহরণ

ধরা যাক, আপনি একটি API কলের টেস্ট করতে চান যা ২ সেকেন্ডে একটি রেসপন্স পাঠায়। Jasmine এর asynchronous টেস্টে done() ব্যবহার করা যেতে পারে।

উদাহরণ:

describe("API Call", function() {
  it("should fetch user data correctly", function(done) {
    const fakeApiCall = function(callback) {
      setTimeout(function() {
        callback({ id: 1, name: "John Doe" });
      }, 2000);
    };

    fakeApiCall(function(response) {
      expect(response.id).toBe(1);
      expect(response.name).toBe("John Doe");
      done();  // Asynchronous কোডের শেষে done() কল করা হচ্ছে
    });
  });
});

এখানে:

  • fakeApiCall(): একটি সাধারণ asynchronous ফাংশন, যা ২ সেকেন্ড পরে একটি callback ফাংশন কল করে।
  • done(): done() কল করা হয়েছে টেস্টের শেষে, যা Jasmine কে জানায় যে asynchronous কার্যক্রম সম্পন্ন হয়েছে।

Error Handling এবং done.fail()

যদি asynchronous কোডে কোনো সমস্যা হয় এবং আপনি তা handle করতে চান, তাহলে done.fail() ব্যবহার করতে পারেন। এটি Jasmine কে জানায় যে টেস্টটি ব্যর্থ হয়েছে এবং টেস্ট ফলাফল হিসেবে একটি error দেখাবে।

done.fail() এর উদাহরণ:

describe("API Call with Error", function() {
  it("should fail when API returns an error", function(done) {
    const fakeApiCall = function(callback) {
      setTimeout(function() {
        callback(new Error("API Error"));
      }, 2000);
    };

    fakeApiCall(function(response) {
      // এটি শুধুমাত্র success case জন্য
    }, function(error) {
      expect(error.message).toBe("API Error");
      done.fail(error);  // যদি error হয়, done.fail() কল হবে
    });
  });
});

এখানে:

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

Promise এর সাথে done() ব্যবহার

JasmineJS এ আপনি যদি Promise ব্যবহার করেন, তবে done() কল করার দরকার নেই। JasmineJS স্বাভাবিকভাবে Promise রিটার্ন করা asynchronous কোডে অপেক্ষা করে এবং Promise resolve হওয়ার পর টেস্ট চালায়।

উদাহরণ:

describe("Promise-based API Call", function() {
  it("should fetch user data correctly", function() {
    const fakeApiCall = function() {
      return new Promise(function(resolve, reject) {
        setTimeout(function() {
          resolve({ id: 1, name: "John Doe" });
        }, 2000);
      });
    };

    return fakeApiCall().then(function(response) {
      expect(response.id).toBe(1);
      expect(response.name).toBe("John Doe");
    });
  });
});

এখানে:

  • Promise: fakeApiCall() একটি Promise রিটার্ন করছে। JasmineJS Promise এর then() ফাংশন থেকে সরাসরি ফলাফল গ্রহণ করবে, এবং আপনি done() কল করার প্রয়োজন নেই।

done() এবং asynchronous কোডের টেস্ট

JasmineJS asynchronous টেস্টিংয়ের জন্য done() ব্যবহার করার সময়, আপনাকে নিশ্চিত করতে হবে যে:

  • done() কল না করলে Jasmine টেস্টটি কখনো শেষ হবে না এবং এটি timeout error দিবে।
  • done.fail() ব্যবহার করে asynchronous টেস্টে error handling করতে হবে।

সারাংশ

  • done(): JasmineJS এ asynchronous কোডের জন্য ব্যবহৃত একটি callback ফাংশন, যা Jasmine কে জানায় যে টেস্ট সম্পন্ন হয়েছে।
  • done.fail(): এটি ব্যবহার করা হয় error handling-এর জন্য, যাতে Jasmine জানে যে টেস্টটি ব্যর্থ হয়েছে।
  • Promise: JasmineJS Promise রিটার্ন করা asynchronous কোডের সাথে স্বয়ংক্রিয়ভাবে কাজ করে এবং done() কল করার দরকার হয় না।
  • Asynchronous testing: JasmineJS asynchronous টেস্টিংয়ের জন্য সঠিক ব্যবস্থাপনা প্রদান করে, যেখানে আপনি done() কল করে Jasmine কে কার্যক্রমের শেষের সংকেত দিতে পারেন।

JasmineJS এর asynchronous টেস্টিং সুবিধা ব্যবহার করে আপনি টাইম-ডিপেনডেন্ট বা ইভেন্ট-ড্রিভেন কার্যক্রমের উপর নির্ভরশীল কোড সহজেই পরীক্ষা করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...