done() ফাংশন এর মাধ্যমে Asynchronous টেস্ট

Asynchronous টেস্টিং - জ্যাসমিনজেএস (JasmineJS) - Web Development

306

JasmineJS মূলত সিঙ্ক্রোনাস টেস্টিং এর জন্য ডিজাইন করা হলেও, এটি অ্যাসিঙ্ক্রোনাস (Asynchronous) কোড টেস্ট করার জন্যও সমর্থন প্রদান করে। অ্যাসিঙ্ক্রোনাস টেস্টে এমন কোড থাকে যা সময় নেয়, যেমন AJAX রিকোয়েস্ট, টাইমআউট, অথবা প্যারালাল প্রসেসিং। JasmineJS এ অ্যাসিঙ্ক্রোনাস টেস্ট করার জন্য done() ফাংশনটি ব্যবহৃত হয়।

done() ফাংশনটি অ্যাসিঙ্ক্রোনাস টেস্টের মধ্যে একটি সিগন্যাল পাঠায় যে টেস্টটি শেষ হয়ে গেছে এবং Jasmine তার ফলাফল রিপোর্ট করতে পারে। এটি সাধারণত it() ব্লকের মধ্যে ব্যবহৃত হয়।


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

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

Syntax:

it("should do something asynchronously", function(done) {
  // অ্যাসিঙ্ক্রোনাস অপারেশন এখানে
  someAsyncFunction(function(result) {
    expect(result).toBe(true);  // পরীক্ষার ফলাফল
    done();  // done() কল করলে Jasmine জানবে টেস্টটি শেষ হয়েছে
  });
});

উদাহরণ: done() ফাংশন সহ অ্যাসিঙ্ক্রোনাস টেস্ট

ধরা যাক, আমরা একটি অ্যাসিঙ্ক্রোনাস ফাংশন পরীক্ষা করতে চাই, যা একটি সময়সীমা নিয়ে কাজ করে এবং পরে একটি ফলাফল প্রদান করে।

describe("Asynchronous Test Example", function() {

  it("should complete the task asynchronously", function(done) {
    setTimeout(function() {
      const result = true;  // অ্যাসিঙ্ক্রোনাস কোডের আউটপুট
      expect(result).toBe(true);  // এখানে আমরা পরীক্ষা করছি যদি result সত্যি হয়
      done();  // done() কল করলে Jasmine বুঝবে টেস্টটি শেষ
    }, 1000);  // ১ সেকেন্ডের টাইমআউট
  });

});

এখানে:

  • setTimeout(): একটি টাইমআউট ফাংশন ব্যবহার করা হয়েছে, যা ১ সেকেন্ড পর কোডের এক্সিকিউশন সম্পন্ন করে।
  • done(): যখন অ্যাসিঙ্ক্রোনাস কাজটি সম্পন্ন হয়, তখন done() কল করা হয়। এটি JasmineJS কে জানিয়ে দেয় যে টেস্টের কার্যক্রম শেষ হয়েছে এবং Jasmine এর ফলাফল রিপোর্ট করতে পারে।

অ্যাসিঙ্ক্রোনাস ফাংশন কল করার অন্যান্য পদ্ধতি

Promise ভিত্তিক অ্যাসিঙ্ক্রোনাস টেস্ট

JasmineJS promises (ES6 promises) এর জন্যও সমর্থন প্রদান করে। আপনি যদি প্রমিস (Promise) ব্যবহার করেন, তবে done() এর পরিবর্তে আপনি return ব্যবহার করতে পারেন, যা Jasmine কে জানিয়ে দেয় টেস্টটি অ্যাসিঙ্ক্রোনাস এবং তার ফলাফল রিটার্ন করতে হবে।

উদাহরণ:

describe("Asynchronous Test with Promise", function() {

  it("should resolve the promise", function() {
    return new Promise(function(resolve, reject) {
      setTimeout(function() {
        resolve(true);  // ১ সেকেন্ড পরে প্রমিস রেজলভ করা হবে
      }, 1000);
    }).then(function(result) {
      expect(result).toBe(true);  // প্রমিস রেজলভ হলে result পরীক্ষা করা হচ্ছে
    });
  });

});

এখানে:

  • return: JasmineJS এর জন্য প্রমিস রিটার্ন করা হচ্ছে। Jasmine বুঝবে যে এটি একটি অ্যাসিঙ্ক্রোনাস টেস্ট এবং প্রমিস রেজলভ হওয়া পর্যন্ত অপেক্ষা করবে।

async/await এর মাধ্যমে অ্যাসিঙ্ক্রোনাস টেস্ট

ES6 এর async/await এর মাধ্যমে অ্যাসিঙ্ক্রোনাস কোড আরও সহজভাবে লেখা যায়। JasmineJS অ্যাসিঙ্ক্রোনাস টেস্টের জন্য async/await এর ব্যবহারেরও সমর্থন প্রদান করে।

উদাহরণ:

describe("Asynchronous Test with async/await", function() {

  it("should resolve the async function", async function() {
    const result = await new Promise(function(resolve, reject) {
      setTimeout(function() {
        resolve(true);  // ১ সেকেন্ড পরে প্রমিস রেজলভ
      }, 1000);
    });
    expect(result).toBe(true);  // প্রমিস রেজলভ হলে result পরীক্ষা
  });

});

এখানে:

  • async/await: এই পদ্ধতিতে আমরা await ব্যবহার করে প্রমিসের রেজলভ হওয়া পর্যন্ত অপেক্ষা করি, এবং পরে টেস্টের ফলাফল পরীক্ষা করি।

done() ফাংশন ব্যবহার না করার সময়

যদি আপনি done() ব্যবহার না করেন, তবে Jasmine অ্যাসিঙ্ক্রোনাস টেস্টটিকে সিঙ্ক্রোনাস (যতটুকু সম্ভব) হিসেবে গণ্য করবে এবং টেস্টটি সময়ের মধ্যে শেষ না হওয়ার কারণে ফেল করবে। সুতরাং অ্যাসিঙ্ক্রোনাস কোডে done() বা প্রমিস ব্যবহার করা অপরিহার্য।


সারাংশ

  • done() ফাংশন: অ্যাসিঙ্ক্রোনাস টেস্টের ক্ষেত্রে JasmineJS কে জানাতে ব্যবহৃত হয় যে টেস্টটি শেষ হয়েছে এবং ফলাফল রিপোর্ট করা যেতে পারে।
  • অ্যাসিঙ্ক্রোনাস কোডের জন্য Promise এবং async/await পদ্ধতি ব্যবহার করা যেতে পারে।
  • done() ব্যবহার করার মাধ্যমে আপনি নিশ্চিত করতে পারবেন যে Jasmine অ্যাসিঙ্ক্রোনাস কোডের কার্যক্রম শেষ হওয়ার পর রিপোর্ট করবে।

JasmineJS এর মাধ্যমে অ্যাসিঙ্ক্রোনাস টেস্ট লেখা সহজ এবং কার্যকরী, যা সঠিকভাবে টেস্ট প্রক্রিয়াকে সমর্থন করে।

Content added By
Promotion

Are you sure to start over?

Loading...