React অ্যাপ্লিকেশন তৈরি করার সময় টেস্টিং একটি গুরুত্বপূর্ণ অংশ। React Testing Library ব্যবহার করে আমরা ব্যবহারকারীর দৃষ্টিকোণ থেকে টেস্টিং করি, যার মাধ্যমে আমরা কম্পোনেন্টের আচরণ পরীক্ষা করতে পারি। এই গাইডে আমরা কিছু সেরা পদ্ধতি জানব যা আপনাকে React Testing Library ব্যবহার করে কার্যকর টেস্ট লেখার জন্য সাহায্য করবে। আমরা কিছু উদাহরণও দেখাবো যাতে আপনি সহজেই এই পদ্ধতিগুলি বুঝতে পারেন।

1. ফোকাসড টেস্ট লিখুন

একটি টেস্টে সব সম্ভাব্য পরিস্থিতি পরীক্ষা করার পরিবর্তে, একটিই আচরণ বা ফিচার পরীক্ষা করুন। এতে সমস্যা বিচ্ছিন্ন হয়ে পড়বে এবং ব্যর্থতার কারণ নির্ধারণ করা সহজ হবে। উদাহরণস্বরূপ:

খারাপ পদ্ধতি

test("ফর্ম ভ্যালিডেশন ভুল ইনপুটে ত্রুটি দেখায় এবং সাবমিশন আটকায়", () => {
  // ... টেস্ট কোড ...
});

ভালো পদ্ধতি

test("ফর্ম ভ্যালিডেশন ভুল ইনপুটে ত্রুটি বার্তা দেখায়", () => {
  // ... টেস্ট কোড ...
});

test("ফর্ম ভুল ইনপুটে সাবমিশন আটকায়", () => {
  // ... টেস্ট কোড ...
});

2. বর্ণনামূলক টেস্ট এবং অ্যাসারশন মেসেজ ব্যবহার করুন

স্পষ্ট এবং বর্ণনামূলক টেস্ট এবং অ্যাসারশন মেসেজ ব্যর্থতার কারণ বুঝতে এবং ডিবাগ করতে সহায়তা করে। আপনার টেস্টের জন্য অর্থপূর্ণ নাম ব্যবহার করুন এবং অ্যাসারশনগুলির জন্য তথ্যপূর্ণ বার্তা দিন। উদাহরণস্বরূপ:

test("বাটন ক্লিক করলে কাউন্টার বাড়ানো উচিত", () => {
  // ... টেস্ট কোড ...

  expect(counter).toHaveTextContent("কাউন্টার সফলভাবে বাড়ানো হয়েছে");
});

3. ইমপ্লিমেন্টেশন ডিটেইলসে নির্ভর করবেন না

এমন ইমপ্লিমেন্টেশন ডিটেইলগুলি পরীক্ষা করবেন না যেগুলি সময়ের সাথে পরিবর্তিত হতে পারে, যেমন CSS ক্লাস নাম বা কম্পোনেন্টের অভ্যন্তরীণ স্ট্রাকচার। বরং, ব্যবহারকারীর দৃষ্টিকোণ থেকে কম্পোনেন্টের আচরণ পরীক্ষা করুন। getByRole, getByText, অথবা getByTestId এর মতো কুয়েরি ব্যবহার করে উপাদানগুলো নির্বাচন করুন।

খারাপ পদ্ধতি

const submitButton = getByClass("submit-button");

ভালো পদ্ধতি

const submitButton = getByRole("button", { name: "Submit" });

4. কুয়েরি ব্যবহার করুন

React Testing Library বিভিন্ন কুয়েরি সরবরাহ করে যা উপাদান নির্বাচনের জন্য ব্যবহার করা যেতে পারে। কাজের জন্য সঠিক কুয়েরি ব্যবহার করুন। উদাহরণস্বরূপ:

টেক্সট কন্টেন্টের মাধ্যমে নির্বাচন

const submitButton = getByText("Submit");

রোলের মাধ্যমে নির্বাচন

const submitButton = getByRole("button", { name: "Submit" });

টেস্ট আইডি দিয়ে নির্বাচন

const submitButton = getByTestId("submit-button");

5. ব্যবহারকারী ইন্টারঅ্যাকশন সিমুলেট করুন

fireEvent এর মতো ইউটিলিটি ফাংশন ব্যবহার করে ব্যবহারকারীর ইন্টারঅ্যাকশন (যেমন ক্লিক, ইনপুট পরিবর্তন, অথবা ফর্ম সাবমিশন) সিমুলেট করুন। এতে আপনি পরীক্ষা করতে পারবেন যে আপনার কম্পোনেন্টগুলি ব্যবহারকারীর ক্রিয়াগুলির প্রতি কিভাবে প্রতিক্রিয়া জানায়।

// বাটন ক্লিক সিমুলেট করা
fireEvent.click(button);

// ফর্ম সাবমিশন সিমুলেট করা
fireEvent.submit(form);

// ইনপুট পরিবর্তন সিমুলেট করা
fireEvent.change(input, { target: { value: "New value" } });

6. অ্যাসিঙ্ক্রোনাস বিহেভিয়ার সঠিকভাবে টেস্ট করুন

অ্যাসিঙ্ক্রোনাস আচরণ পরীক্ষা করার সময় নিশ্চিত করুন যে আপনার টেস্টগুলি প্রত্যাশিত আচরণ ঘটার আগে অ্যাসারশনগুলো করে না। async/await, waitFor, অথবা act ফাংশন ব্যবহার করে অ্যাসিঙ্ক্রোনাস অপারেশনগুলি পরিচালনা করুন।

// API কল টেস্ট করা
await waitFor(() => expect(api.getUsers).toHaveBeenCalledTimes(1));

// প্রমিজ রেজোলিউশন টেস্ট করা
await expect(fetchData()).resolves.toEqual(expectedData);

7. টেস্ট হেলপার এবং ইউটিলিটি ব্যবহার করুন

কমন সেটআপ বা অ্যাসারশনগুলি পরিচালনা করার জন্য টেস্ট হেলপার এবং কাস্টম টেস্ট ইউটিলিটি ব্যবহার করুন। এগুলি আপনার টেস্টগুলিকে আরও সংক্ষিপ্ত এবং পাঠযোগ্য করে তুলবে। উদাহরণস্বরূপ:

// কাস্টম টেস্ট হেলপার
const renderComponent = (props) => {
  return render(<MyComponent {...props} />);
};

// কাস্টম টেস্ট হেলপার ব্যবহার
const { getByText } = renderComponent({ title: "Hello" });
const titleElement = getByText("Hello");
expect(titleElement).toBeInTheDocument();

উপসংহার

এই সেরা পদ্ধতিগুলি অনুসরণ করলে আপনি React Testing Library ব্যবহার করে কার্যকর টেস্ট লিখতে পারবেন এবং আপনার React কম্পোনেন্টের গুণমান এবং নির্ভরযোগ্যতা নিশ্চিত করতে পারবেন। মনে রাখবেন, আপনার কম্পোনেন্টের আচরণে ফোকাস করুন, বর্ণনামূলক টেস্ট এবং অ্যাসারশন বার্তা ব্যবহার করুন, ইমপ্লিমেন্টেশন ডিটেইলসে নির্ভর করবেন না, এবং React Testing Library দ্বারা প্রদত্ত ইউটিলিটি এবং কুয়েরি ব্যবহার করুন। একটি শক্তিশালী টেস্টিং ভিত্তি থাকার মাধ্যমে আপনি আত্মবিশ্বাসের সাথে React অ্যাপ্লিকেশন তৈরি এবং রক্ষণাবেক্ষণ করতে পারবেন।