$lang['tuto'] = "টিউটোরিয়াল"; ?> ইনপুট সাফ করার পরে jQuery-এ

ইনপুট সাফ করার পরে jQuery-এ সার্চ ফিল্টার আপডেট না করার সমস্যা ঠিক করা

Temp mail SuperHeros
ইনপুট সাফ করার পরে jQuery-এ সার্চ ফিল্টার আপডেট না করার সমস্যা ঠিক করা
ইনপুট সাফ করার পরে jQuery-এ সার্চ ফিল্টার আপডেট না করার সমস্যা ঠিক করা

রিয়েল-টাইম টেবিলে jQuery সার্চ ফিল্টার সমস্যা সমাধান করা

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

সাধারণত, সার্চ ইনপুট সাফ করার ফলে সমস্ত সারি আবার দেখানোর জন্য টেবিলটিকে ট্রিগার করা উচিত। যাইহোক, বর্তমান পরিস্থিতিতে, ইনপুট ক্ষেত্রটি সাফ করা হলেও, ফিল্টার করা সারিগুলি অপরিবর্তিত থাকে। এই আচরণ বিভ্রান্তি সৃষ্টি করে ব্যবহারকারীর অভিজ্ঞতাকে ব্যাহত করতে পারে, কারণ অনুসন্ধানের মানদণ্ড রিসেট করার পরে ইন্টারফেসটি প্রত্যাশা অনুযায়ী আচরণ করে না।

সমস্যাটি সম্ভবত কী-আপ ইভেন্ট এবং বোতাম ক্লিক ইভেন্টের মধ্যে মিথস্ক্রিয়া থেকে উদ্ভূত। যখন পরিষ্কার বোতামটি সফলভাবে ইনপুট ক্ষেত্রটি খালি করে, তখন স্ক্রিপ্টটি ফিল্টারিং লজিকটিকে পুনরায় ট্রিগার করতে পারে না, টেবিলটিকে তার আগের অবস্থায় রেখে। এই ধরনের সমস্যাগুলি সমাধানের জন্য এই ঘটনাগুলি jQuery-এ কীভাবে আচরণ করে তা বোঝা গুরুত্বপূর্ণ।

এই নিবন্ধে, আমরা সমস্যাটি বিশদভাবে অন্বেষণ করব, কেন এটি ঘটে তার অন্তর্দৃষ্টি প্রদান করব এবং একটি পরিমার্জিত সমাধান অফার করব যা নিশ্চিত করে যে অনুসন্ধান ইনপুটটি ক্ষেত্রটি পরিষ্কার করার পরেও ত্রুটিহীনভাবে কাজ করে৷ কয়েকটি পরিবর্তনের সাথে, ব্যবহারকারী যখনই অনুসন্ধানটি পুনরায় সেট করবে তখন আপনার অনুসন্ধান ফিল্টারটি মসৃণভাবে আপডেট হবে।

আদেশ ব্যবহার এবং বর্ণনার উদাহরণ
filter() jQuery এ উপাদানগুলির উপর পুনরাবৃত্তি করতে এবং একটি শর্তের সাথে মেলে সেগুলি ফেরত দিতে ব্যবহৃত হয়।
উদাহরণ: $("#ডেটা tr").ফিল্টার(ফাংশন() {...});
বর্ণনা: অনুসন্ধান ইনপুটের উপর ভিত্তি করে সারণি সারিগুলি ফিল্টার করে, শুধুমাত্র ইনপুটের সাথে মেলে এমন সারিগুলি দেখায়৷
toggle() গতিশীলভাবে উপাদানগুলির প্রদর্শনের অবস্থা নিয়ন্ত্রণ করে।
উদাহরণ: $(এই).টগল(শর্ত);
বর্ণনা: অনুসন্ধান শব্দটি পাওয়া গেছে কিনা তার উপর ভিত্তি করে সারি দৃশ্যমানতা টগল করে।
dispatchEvent() ম্যানুয়ালি একটি উপাদানে একটি ইভেন্ট ট্রিগার করে।
উদাহরণ: searchInput.dispatchEvent(নতুন ইভেন্ট("ইনপুট"));
বর্ণনা: ইনপুট সাফ করার পরে সার্চ লজিক প্রোগ্রামেটিকভাবে ট্রিগার হয়েছে তা নিশ্চিত করে।
addEventListener() ভ্যানিলা জাভাস্ক্রিপ্টের একটি উপাদানের সাথে একটি ইভেন্ট হ্যান্ডলার সংযুক্ত করে।
উদাহরণ: clearButton.addEventListener("ক্লিক", ফাংশন() {...});
বর্ণনা: ইনপুট ক্ষেত্র পুনরায় সেট করতে এবং ফিল্টার রিফ্রেশ করতে পরিষ্কার বোতাম ক্লিকের জন্য শোনেন।
querySelectorAll() CSS নির্বাচক ব্যবহার করে সব মিলে যাওয়া উপাদান নির্বাচন করে।
উদাহরণ: const সারি = document.querySelectorAll("#Data tr");
বর্ণনা: ফিল্টারিং যুক্তি প্রয়োগ করতে টেবিল থেকে সমস্ত সারি পুনরুদ্ধার করে।
module.exports Node.js বা JavaScript মডিউলে ফাংশন এক্সপোর্ট করতে ব্যবহৃত হয়।
উদাহরণ: module.exports = { filterTable };
বর্ণনা: ফিল্টারিং যুক্তি রপ্তানি করে যাতে এটি একাধিক স্ক্রিপ্টে পুনরায় ব্যবহার করা যায়।
beforeEach() একটি জেসমিন পরীক্ষার ফাংশন যা প্রতিটি পরীক্ষার ক্ষেত্রে সেটআপ কোড চালায়।
উদাহরণ: beforeEach(ফাংশন() {...});
বর্ণনা: নতুন শুরু নিশ্চিত করতে প্রতিটি ইউনিট পরীক্ষার আগে DOM উপাদান প্রস্তুত করে।
textContent একটি উপাদানের পাঠ্য বিষয়বস্তু পুনরুদ্ধার করে।
উদাহরণ: row.textContent.toLowerCase();
বর্ণনা: ফিল্টারিংয়ের সময় কেস-অসংবেদনশীল তুলনার জন্য সারি সামগ্রী বের করে।
expect() পরীক্ষায় প্রত্যাশিত ফলাফল সংজ্ঞায়িত করতে ব্যবহৃত একটি জেসমিন দাবী পদ্ধতি।
উদাহরণ: প্রত্যাশা (row.style.display).toBe("");
বর্ণনা: যাচাই করে যে ফিল্টারিং লজিক উদ্দেশ্য অনুযায়ী সারিগুলি প্রদর্শন করে বা লুকিয়ে রাখে।
DOMContentLoaded প্রাথমিক HTML নথি সম্পূর্ণরূপে লোড হলে একটি জাভাস্ক্রিপ্ট ইভেন্ট ফায়ার করা হয়৷
উদাহরণ: document.addEventListener("DOMContentLoaded", function() {...});
বর্ণনা: DOM প্রস্তুত হওয়ার পরেই স্ক্রিপ্টটি চলে তা নিশ্চিত করে।

কিভাবে jQuery এবং জাভাস্ক্রিপ্টে মসৃণ অনুসন্ধান ফিল্টারিং এবং ক্লিয়ারিং নিশ্চিত করবেন

প্রথম স্ক্রিপ্ট উদাহরণে, আমরা একটি গতিশীল প্রয়োগ করেছি অনুসন্ধান ফিল্টার jQuery ব্যবহার করে। যুক্তি সংযুক্ত করা হয় কীআপ ইনপুট ক্ষেত্রের ইভেন্ট, যা প্রতিবার ব্যবহারকারী টাইপ করার সময় ট্রিগার করে। ইনপুট মান কেস-অসংবেদনশীল ম্যাচিং নিশ্চিত করতে ছোট হাতের অক্ষরে রূপান্তরিত করা হয়। প্রতিটি টেবিল সারি এটি অনুসন্ধান শব্দ রয়েছে কিনা তা পরীক্ষা করা হয়, এবং সারিগুলি ব্যবহার করে সেই অনুযায়ী টগল করা হয় টগল() ফাংশন এটি শুধুমাত্র মিলে যাওয়া সারিগুলিকে দৃশ্যমান রাখার অনুমতি দেয়, ব্যবহারকারীদের জন্য বড় টেবিলে নির্দিষ্ট ডেটা খুঁজে পাওয়া সহজ করে তোলে।

যাইহোক, একটি পরিষ্কার বোতাম দিয়ে অনুসন্ধান পুনরায় সেট করার চেষ্টা করার সময় একটি সমস্যা দেখা দেয়। মূল স্ক্রিপ্টে, পরিষ্কার বোতামটি ইনপুট ক্ষেত্রটিকে একটি খালি স্ট্রিংয়ে সেট করে কিন্তু স্বয়ংক্রিয়ভাবে অনুসন্ধান আপডেটটি ট্রিগার করে না। বর্ধিত সমাধান নিশ্চিত করে যে পরিষ্কার বোতাম টিপানোর পরে, কী-আপ ইভেন্টটি ম্যানুয়ালি পুনরায় ট্রিগার হয় ট্রিগার() পদ্ধতি, যা আবার সমস্ত সারি দেখিয়ে টেবিল ভিউ আপডেট করে। এই পদ্ধতিটি মসৃণ কার্যকারিতা নিশ্চিত করে এবং অনুসন্ধান ক্ষেত্রটি খালিতে পুনরায় সেট করা হলে বিভ্রান্তি এড়ায়।

দ্বিতীয় উদাহরণটি প্লেইন জাভাস্ক্রিপ্ট দিয়ে jQuery প্রতিস্থাপন করে একটি বিকল্প পদ্ধতি প্রদান করে। আমরা একটি সংযুক্ত করে অনুরূপ কার্যকারিতা অর্জন করি ইনপুট ইভেন্ট লিসেনার সার্চ ফিল্ডে এবং সরাসরি সারি আপডেট করে style.display. ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করা বাহ্যিক লাইব্রেরির উপর নির্ভরতা হ্রাস করে এবং কর্মক্ষমতা উন্নত করে। ক্লিয়ার বোতাম, যখন ক্লিক করা হয়, শুধুমাত্র অনুসন্ধান ক্ষেত্রটি সাফ করে না তবে ফিল্টারিং লজিক পুনরায় চালানোর জন্য একটি নতুন ইভেন্ট প্রেরণ করে, যাতে টেবিলের বিষয়বস্তু সঠিকভাবে রিফ্রেশ হয়।

মডুলার উদাহরণটি মূল স্ক্রিপ্ট থেকে অনুসন্ধান যুক্তিকে আলাদা করতে ES6 মডিউল ব্যবহার করে। এই পদ্ধতিটি একটি পৃথক ফাইলে ফিল্টারিং ফাংশন রেখে কোড পুনঃব্যবহারযোগ্যতা এবং রক্ষণাবেক্ষণের প্রচার করে। অনুসন্ধান এবং স্পষ্ট কার্যকারিতা যাচাই করতে জেসমিন ফ্রেমওয়ার্ক ব্যবহার করে কীভাবে ইউনিট পরীক্ষা লিখতে হয় তাও আমরা প্রদর্শন করেছি। এই পরীক্ষাগুলি নিশ্চিত করে যে অনুসন্ধানটি সঠিকভাবে সারিগুলির সাথে মেলে এবং ইনপুট সাফ করা সমস্ত সারি পুনরুদ্ধার করে৷ মডুলারিটি, ইউনিট পরীক্ষা এবং অপ্টিমাইজড ইভেন্ট হ্যান্ডলিং সহ, সমাধানটি বিভিন্ন ওয়েব অ্যাপ্লিকেশনে ব্যবহারের জন্য শক্তিশালী এবং মাপযোগ্য হয়ে ওঠে।

একাধিক পদ্ধতির সাথে jQuery টেবিল ফিল্টার রিসেট সমস্যা সমাধান করা

ফ্রন্ট-এন্ড ডায়নামিক টেবিল ফিল্টারিং এবং ইভেন্ট পরিচালনার জন্য jQuery ব্যবহার করা

$(document).ready(function() {
  $("#SearchInput").on("keyup", function() {
    var value = $(this).val().toLowerCase();
    $("#Data tr").filter(function() {
      $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);
    });
  });
  $("#clearSearch").click(function() {
    $("#SearchInput").val("");
    $("#SearchInput").trigger("keyup");  // Ensure search updates on clear
  });
});

ভ্যানিলা জাভাস্ক্রিপ্টে ইভেন্ট-চালিত লজিক সহ ক্লিয়ার বোতাম প্রয়োগ করা

jQuery ছাড়া একই কার্যকারিতা অর্জন করতে প্লেইন জাভাস্ক্রিপ্ট ব্যবহার করা

document.addEventListener("DOMContentLoaded", function() {
  const searchInput = document.getElementById("SearchInput");
  const clearButton = document.getElementById("clearSearch");
  const rows = document.querySelectorAll("#Data tr");

  searchInput.addEventListener("input", function() {
    const value = searchInput.value.toLowerCase();
    rows.forEach(row => {
      row.style.display = row.textContent.toLowerCase().includes(value) ? "" : "none";
    });
  });

  clearButton.addEventListener("click", function() {
    searchInput.value = "";
    searchInput.dispatchEvent(new Event("input"));  // Trigger filtering
  });
});

ES6 মডিউল সহ একটি মডুলার পদ্ধতি ব্যবহার করে ডায়নামিক অনুসন্ধান ফিল্টার পরিচালনা করা

ভাল কোড পুনঃব্যবহারের জন্য রপ্তানিযোগ্য ফাংশন সহ মডুলার জাভাস্ক্রিপ্ট

// searchFilter.js - Search filtering logic as an ES6 module
export function filterTable(inputId, tableId) {
  const input = document.getElementById(inputId);
  const rows = document.querySelectorAll(`#${tableId} tr`);
  input.addEventListener("input", () => {
    const query = input.value.toLowerCase();
    rows.forEach(row => {
      row.style.display = row.textContent.toLowerCase().includes(query) ? "" : "none";
    });
  });
}

// main.js - Importing and using the filter logic
import { filterTable } from "./searchFilter.js";

document.addEventListener("DOMContentLoaded", () => {
  filterTable("SearchInput", "Data");
  document.getElementById("clearSearch").addEventListener("click", () => {
    document.getElementById("SearchInput").value = "";
    document.getElementById("SearchInput").dispatchEvent(new Event("input"));
  });
});

জেসমিন ব্যবহার করে ইউনিট টেস্টের সাথে অনুসন্ধান এবং পরিষ্কার কার্যকারিতা পরীক্ষা করা

কার্যকারিতা যাচাই করার জন্য জেসমিন পরীক্ষার কাঠামো

describe("Search and Clear Functionality", function() {
  beforeEach(function() {
    document.body.innerHTML = `
      <input type="text" id="SearchInput" />
      <button id="clearSearch">Clear</button>
      <table id="Data">
        <tr><td>Row 1</td></tr>
        <tr><td>Row 2</td></tr>
      </table>`;
    require("./searchFilter.js").filterTable("SearchInput", "Data");
  });

  it("should filter rows based on search input", function() {
    document.getElementById("SearchInput").value = "Row 1";
    document.getElementById("SearchInput").dispatchEvent(new Event("input"));
    expect(document.querySelector("#Data tr").style.display).toBe("");
  });

  it("should clear search input and show all rows", function() {
    document.getElementById("clearSearch").click();
    expect(document.getElementById("SearchInput").value).toBe("");
    expect(document.querySelectorAll("#Data tr").length).toBe(2);
  });
});

ডায়নামিক ফিল্টারগুলির জন্য ইভেন্ট হ্যান্ডলিং এবং রিয়েল-টাইম আপডেটগুলি অন্বেষণ করা

পূর্বে আলোচনা করা হয়নি এমন একটি দিক হল দক্ষতার গুরুত্ব ঘটনা পরিচালনা সার্চ ফিল্টার পরিচালনার জন্য জাভাস্ক্রিপ্টে। ব্যবহারকারীর ইনপুট নিয়ে কাজ করার সময়, ইভেন্টের মতো নিশ্চিত করা keyup বা input একটি মসৃণ ব্যবহারকারীর অভিজ্ঞতা বজায় রাখার জন্য অপ্টিমাইজ করা গুরুত্বপূর্ণ। যদি একাধিক ইভেন্ট শ্রোতারা ভুলভাবে বা অপ্রয়োজনীয়ভাবে সংযুক্ত থাকে, তাহলে এর ফলে কর্মক্ষমতা সমস্যা হতে পারে, বিশেষ করে বড় ডেটাসেটের সাথে। শত শত বা হাজার হাজার টেবিল সারি সহ পরিস্থিতিতে, অনুসন্ধান এবং পরিষ্কার কার্যকারিতা অপ্টিমাইজ করা অপরিহার্য হয়ে ওঠে।

আরেকটি বিবেচনা ব্যবহার করা হয় debouncing ব্যবহারকারীর কীস্ট্রোক দ্বারা ট্রিগার হওয়া ফাংশন কলের ফ্রিকোয়েন্সি কমাতে। ডিবাউন্সিং নিশ্চিত করে যে একটি ফাংশন শুধুমাত্র একবার কার্যকর করা হয় যখন একজন ব্যবহারকারী একটি নির্দিষ্ট সময়ের জন্য টাইপ করা বন্ধ করে দেয়। এটি অনুসন্ধান ফিল্টারগুলির কার্যকারিতা উল্লেখযোগ্যভাবে উন্নত করতে পারে, বিশেষত যখন তারা জটিল যুক্তি বা নেটওয়ার্ক অনুরোধগুলিকে জড়িত করে। অনুসন্ধান ইনপুটে একটি ডিবাউন্স প্রয়োগ করা অপ্রয়োজনীয় DOM আপডেট কমিয়ে ব্যবহারযোগ্যতা এবং দক্ষতা উভয়ই উন্নত করে।

গতিশীলভাবে জেনারেট করা টেবিলের সাথে কাজ করা বিকাশকারীদের জন্য, একটি সাধারণ চ্যালেঞ্জ হল নতুন সারি যোগ করার পরেও ফিল্টারিং কাজ করে তা নিশ্চিত করা। এর জন্য ইভেন্ট শ্রোতাদের পুনরায় সংযুক্ত করা বা অভিভাবক উপাদানের মাধ্যমে প্রতিনিধিদের ব্যবহার করা প্রয়োজন। ইভেন্ট প্রতিনিধি দল নিশ্চিত করে যে input স্ক্রিপ্ট পুনরায় চালু করার প্রয়োজন ছাড়াই গতিশীলভাবে সারি যোগ করা হলেও ইভেন্ট এখনও পরিবর্তনগুলি ক্যাপচার করে। পরীক্ষার জন্য মডুলার জাভাস্ক্রিপ্ট এবং জেসমিনের মতো ফ্রেমওয়ার্কগুলির সাথে এটি একত্রিত করা একটি শক্তিশালী সমাধান নিশ্চিত করে যা বিভিন্ন পরিস্থিতিতে পরিচালনা করে।

jQuery-এ সার্চ ফিল্টার অপ্টিমাইজ করার বিষয়ে প্রায়শই জিজ্ঞাসিত প্রশ্ন

  1. আমি কীভাবে নিশ্চিত করব যে অনুসন্ধান ফিল্টার গতিশীলভাবে যুক্ত সারিগুলির সাথে কাজ করে?
  2. ব্যবহার করুন event delegation সংযুক্ত করে input সারিগুলির একটি মূল উপাদানের ইভেন্ট। এইভাবে, ইভেন্টটি এমনকি নতুন যোগ করা সারিগুলির জন্যও ট্রিগার করবে।
  3. মধ্যে পার্থক্য কি keyup এবং input ঘটনা?
  4. keyup একটি কী প্রকাশ করার পরেই ইভেন্ট ট্রিগার হয়, যখন input ইভেন্ট পেস্ট ইভেন্ট এবং চরিত্র মুছে ফেলা সহ ইনপুটে যেকোনো পরিবর্তনের জন্য ট্রিগার করে।
  5. আমি কিভাবে বড় ডেটাসেট সহ একটি অনুসন্ধান ফিল্টারের কর্মক্ষমতা উন্নত করতে পারি?
  6. বাস্তবায়ন করুন debouncing টাইপ করার সময় ফিল্টার ফাংশন কল করার সংখ্যা কমাতে অনুসন্ধান ইনপুটে।
  7. একটি টেবিলের একাধিক কলামে অনুসন্ধান ফিল্টার ব্যবহার করা কি সম্ভব?
  8. হ্যাঁ, আপনি একাধিক চেক করতে ফিল্টার লজিক পরিবর্তন করতে পারেন td অনুসন্ধানের মানদণ্ডের সাথে মেলে প্রতিটি সারির মধ্যে উপাদান।
  9. কেন আমার পরিষ্কার বোতাম ক্লিক করার পরে টেবিল রিফ্রেশ করে না?
  10. ম্যানুয়ালি ট্রিগার নিশ্চিত করুন keyup বা input টেবিল ডিসপ্লে রিফ্রেশ করতে ইনপুট ক্ষেত্র সাফ করার পরে ইভেন্ট।

jQuery ফিল্টার সমস্যা সমাধানের বিষয়ে চূড়ান্ত চিন্তাভাবনা

jQuery-এর সাহায্যে সার্চ ফিল্টারগুলির যথাযথ কার্যকারিতা নিশ্চিত করা একটি নির্বিঘ্ন ব্যবহারকারীর অভিজ্ঞতার জন্য অপরিহার্য। ইনপুট সাফ করার পরে অনুসন্ধান আপডেট না হওয়ার মতো সমস্যাগুলি সঠিকভাবে ইভেন্টগুলি পরিচালনা করে এবং প্রয়োজনে সমস্ত প্রাসঙ্গিক যুক্তি পুনরায় ট্রিগার করা নিশ্চিত করে সমাধান করা যেতে পারে।

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

jQuery অনুসন্ধান ফিল্টার সমস্যা সমাধানের জন্য উত্স এবং তথ্যসূত্র
  1. সঠিক ইভেন্ট হ্যান্ডলিং এবং ফিল্টারিং লজিক নিশ্চিত করতে এই নিবন্ধটি jQuery লাইব্রেরি থেকে অফিসিয়াল ডকুমেন্টেশন এবং সর্বোত্তম অনুশীলনগুলি ব্যবহার করে। আরো বিস্তারিত জানার জন্য, অফিসিয়াল jQuery ডকুমেন্টেশন দেখুন: jQuery API ডকুমেন্টেশন .
  2. জাভাস্ক্রিপ্ট ইভেন্ট ম্যানেজমেন্ট এবং কীভাবে ইনপুট এবং কীআপ ইভেন্টগুলি কার্যকরভাবে ব্যবহার করবেন তার উদাহরণগুলির জন্য, মজিলা ডেভেলপার নেটওয়ার্কে ইভেন্ট পরিচালনার নির্দেশিকা দেখুন: MDN ওয়েব ডক্স - ইভেন্ট .
  3. মডুলার জাভাস্ক্রিপ্ট এবং কোড অপ্টিমাইজেশানের অন্তর্দৃষ্টি নিম্নলিখিত সংস্থান থেকে নেওয়া হয়েছে: JavaScript.info - মডিউল .
  4. জেসমিনের মতো টেস্টিং ফ্রেমওয়ার্কের ব্যবহার অফিসিয়াল ডকুমেন্টেশন থেকে এখানে উল্লেখ করা হয়েছে: জেসমিন ডকুমেন্টেশন .