SpyOn, CallThrough, CallFake, এবং ReturnValue এর ব্যবহার

Spies ব্যবহার করে ফাংশন টেস্ট করা - জ্যাসমিনজেএস (JasmineJS) - Web Development

319

JasmineJS এ spying একটি শক্তিশালী ফিচার, যা আপনাকে আপনার কোডের কোনো ফাংশনের আচরণ ট্র্যাক করতে এবং সেগুলোর উপর নিয়ন্ত্রণ পেতে সাহায্য করে। Jasmine এর spyOn() ফাংশনটি একটি মেথড বা ফাংশনকে "স্পাই" করার জন্য ব্যবহৃত হয়, অর্থাৎ, এটি ফাংশনের কল ট্র্যাক করে এবং আপনি সেই ফাংশনের ফলাফল এবং আউটপুট পরীক্ষা করতে পারেন।

JasmineJS এ Spy এর সাথে বিভিন্ন পদ্ধতি (methods) ব্যবহার করা হয়, যেমন callThrough(), callFake(), এবং returnValue(), যা স্পাইয়ের আচরণ নিয়ন্ত্রণ করতে সহায়তা করে। নিচে এই ফিচারগুলোর ব্যবহার বিস্তারিতভাবে আলোচনা করা হলো।


spyOn() ফাংশন

spyOn() ফাংশনটি আপনার কোডের কোনো ফাংশন বা মেথডের উপর স্পাই (spy) তৈরি করতে ব্যবহৃত হয়। এটি মূল ফাংশনটিকে ট্র্যাক করে, যাতে আপনি দেখতে পারেন এটি কখন এবং কীভাবে কল হচ্ছে।

spyOn() এর গঠন:

spyOn(object, 'methodName');

এখানে:

  • object: সেই অবজেক্ট যেখানে মেথডটি রয়েছে।
  • methodName: সেই মেথড বা ফাংশনের নাম যেটি আপনি স্পাই করতে চান।

উদাহরণ:

describe("spyOn example", function() {
  it("should spy on a method", function() {
    const user = {
      greet: function(name) {
        return "Hello, " + name;
      }
    };

    spyOn(user, 'greet');  // 'greet' মেথডটিকে স্পাই করা হচ্ছে
    user.greet("Alice");

    expect(user.greet).toHaveBeenCalled();  // নিশ্চিত করছে যে greet মেথডটি কল হয়েছে
  });
});

এখানে spyOn() ফাংশনটি user.greet মেথডটিকে স্পাই করছে এবং পরবর্তীতে যাচাই করছে যে সেটি কল হয়েছে কিনা।


callThrough()

callThrough() পদ্ধতিটি স্পাই করা মেথডটি তার আসল আচরণে ফিরে যায়। অর্থাৎ, এটি স্পাই করা মেথডটির আসল কার্যকারিতা (functionality) চালু রাখে, কিন্তু একই সঙ্গে স্পাইয়ের ট্র্যাকিংও করে।

ব্যবহার:

spyOn(object, 'methodName').and.callThrough();

উদাহরণ:

describe("callThrough example", function() {
  it("should call the original function", function() {
    const user = {
      greet: function(name) {
        return "Hello, " + name;
      }
    };

    spyOn(user, 'greet').and.callThrough();  // আসল greet মেথডটিকে কল থ্রু করা হচ্ছে
    const message = user.greet("Alice");

    expect(user.greet).toHaveBeenCalled();  // নিশ্চিত করছে যে greet মেথডটি কল হয়েছে
    expect(message).toBe("Hello, Alice");  // আসল মেথড থেকে পাওয়া আউটপুট চেক করছে
  });
});

এখানে callThrough() নিশ্চিত করছে যে greet মেথডটি আসল কার্যকারিতা অনুযায়ী কাজ করছে এবং একই সঙ্গে এটি স্পাইও করছে।


callFake()

callFake() পদ্ধতিটি স্পাই করা মেথডের কার্যকারিতা পরিবর্তন করে। এটি আপনাকে একটি কাস্টম ফাংশন বা মক ফাংশন ব্যবহার করার সুযোগ দেয়, যা মূল মেথডটির পরিবর্তে চালানো হয়।

ব্যবহার:

spyOn(object, 'methodName').and.callFake(function() {
  // কাস্টম ফাংশন
});

উদাহরণ:

describe("callFake example", function() {
  it("should use a fake function", function() {
    const user = {
      greet: function(name) {
        return "Hello, " + name;
      }
    };

    spyOn(user, 'greet').and.callFake(function(name) {
      return "Hi, " + name;  // মূল greet মেথডের পরিবর্তে ফেক ফাংশন ব্যবহার হচ্ছে
    });

    const message = user.greet("Alice");

    expect(user.greet).toHaveBeenCalled();  // নিশ্চিত করছে যে greet মেথডটি কল হয়েছে
    expect(message).toBe("Hi, Alice");  // ফেক ফাংশনের আউটপুট চেক করছে
  });
});

এখানে callFake() ফাংশনটি আসল greet মেথডের পরিবর্তে একটি কাস্টম ফাংশন ব্যবহার করছে, যার মাধ্যমে আপনি মেথডটির আচরণ পুরোপুরি নিয়ন্ত্রণ করতে পারেন।


returnValue()

returnValue() পদ্ধতিটি স্পাই করা মেথড থেকে একটি কাস্টম রিটার্ন ভ্যালু প্রদান করে। এটি আপনাকে স্পাই করা ফাংশনের আউটপুট নিয়ন্ত্রণ করতে সাহায্য করে, যাতে আপনি একটি নির্দিষ্ট মান ফেরত দিতে পারেন।

ব্যবহার:

spyOn(object, 'methodName').and.returnValue(value);

উদাহরণ:

describe("returnValue example", function() {
  it("should return a specific value", function() {
    const user = {
      greet: function(name) {
        return "Hello, " + name;
      }
    };

    spyOn(user, 'greet').and.returnValue("Hello, Mocked World!");  // কাস্টম রিটার্ন ভ্যালু
    const message = user.greet("Alice");

    expect(user.greet).toHaveBeenCalled();  // নিশ্চিত করছে যে greet মেথডটি কল হয়েছে
    expect(message).toBe("Hello, Mocked World!");  // নির্দিষ্ট কাস্টম রিটার্ন ভ্যালু চেক করছে
  });
});

এখানে returnValue() ফাংশনটি greet মেথডের আউটপুটকে কাস্টম ভ্যালু "Hello, Mocked World!" দিয়ে প্রতিস্থাপন করেছে।


সারাংশ

JasmineJS এর spying এবং Matchers ব্যবহারের মাধ্যমে আপনি সহজেই কোনো ফাংশনের আচরণ ট্র্যাক এবং নিয়ন্ত্রণ করতে পারেন। spyOn() দিয়ে স্পাই শুরু করা হয়, এবং তারপরে আপনি callThrough(), callFake(), এবং returnValue() এর মাধ্যমে স্পাইয়ের আচরণ পরিবর্তন বা নিয়ন্ত্রণ করতে পারেন:

  • callThrough(): স্পাই করা ফাংশনটি তার আসল আচরণ ধরে রেখে কল হয়।
  • callFake(): স্পাই করা ফাংশনটির পরিবর্তে একটি কাস্টম ফাংশন বা মক ফাংশন ব্যবহার করা হয়।
  • returnValue(): স্পাই করা ফাংশন থেকে একটি কাস্টম রিটার্ন ভ্যালু প্রদান করা হয়।

এই ফিচারগুলো জাভাস্ক্রিপ্ট টেস্টিংয়ে মকিং এবং স্টাবিংয়ের কাজকে অনেক সহজ এবং শক্তিশালী করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...