ইউনিট পরীক্ষা তৈরি করুন

Firebase Local Emulator Suite আপনার অ্যাপের বৈশিষ্ট্য এবং আচরণ সম্পূর্ণরূপে যাচাই করা সহজ করে তোলে। এটি আপনার Firebase Security Rules কনফিগারেশন যাচাই করার জন্যও একটি চমৎকার টুল। একটি স্থানীয় পরিবেশে ইউনিট টেস্ট চালানো এবং স্বয়ংক্রিয় করতে ফায়ারবেস এমুলেটরগুলো ব্যবহার করুন। এই ডকুমেন্টে বর্ণিত পদ্ধতিগুলো আপনার অ্যাপের জন্য ইউনিট টেস্ট তৈরি এবং স্বয়ংক্রিয় করতে সাহায্য করবে, যা আপনার Security Rules যাচাই করবে।

যদি আগে থেকে না করে থাকেন, তাহলে ফায়ারবেস এমুলেটরগুলো সেট আপ করুন

এমুলেটর চালানোর আগে

এমুলেটর ব্যবহার শুরু করার আগে নিম্নলিখিত বিষয়গুলো মনে রাখবেন:

  • এমুলেটরটি প্রাথমিকভাবে আপনার firebase.json ফাইলের firestore.rules বা storage.rules ফিল্ডে নির্দিষ্ট করা নিয়মগুলো লোড করবে। যদি ফাইলটি বিদ্যমান না থাকে এবং আপনি নীচে বর্ণিত loadFirestoreRules বা loadStorageRules মেথডটি ব্যবহার না করেন, তাহলে এমুলেটরটি সমস্ত প্রজেক্টকে খোলা নিয়মযুক্ত হিসেবে গণ্য করবে।
  • যদিও বেশিরভাগ Firebase SDK সরাসরি এমুলেটরগুলির সাথে কাজ করে, শুধুমাত্র @firebase/rules-unit-testing লাইব্রেরিটি সিকিউরিটি রুলস-এ auth মক করা সমর্থন করে, যা ইউনিট টেস্টকে অনেক সহজ করে তোলে। এছাড়াও, লাইব্রেরিটি সমস্ত ডেটা মুছে ফেলার মতো কয়েকটি এমুলেটর-নির্দিষ্ট বৈশিষ্ট্য সমর্থন করে, যা নিচে তালিকাভুক্ত করা হলো।
  • এমুলেটরগুলো ক্লায়েন্ট SDK-এর মাধ্যমে সরবরাহ করা প্রোডাকশন Firebase Auth টোকেনও গ্রহণ করবে এবং সেই অনুযায়ী নিয়মগুলো মূল্যায়ন করবে, যা ইন্টিগ্রেশন এবং ম্যানুয়াল টেস্টের ক্ষেত্রে আপনার অ্যাপ্লিকেশনকে সরাসরি এমুলেটরগুলোর সাথে সংযুক্ত করার সুযোগ দেয়।

ডাটাবেস এমুলেটর এবং প্রোডাকশনের মধ্যে পার্থক্য

  • আপনাকে আলাদাভাবে ডাটাবেস ইনস্ট্যান্স তৈরি করতে হবে না। এমুলেটরটি অ্যাক্সেস করা যেকোনো ডাটাবেস ইনস্ট্যান্স স্বয়ংক্রিয়ভাবে তৈরি করে নেবে।
  • প্রতিটি নতুন ডেটাবেস নির্দিষ্ট নিয়মকানুন সহ চালু করা হয়, ফলে নন-অ্যাডমিন ব্যবহারকারীরা এতে পড়তে বা লিখতে পারবেন না।
  • প্রতিটি অনুকৃত ডাটাবেস স্পার্ক প্ল্যানের সীমা এবং কোটা প্রয়োগ করে (বিশেষত, এটি প্রতিটি ইনস্ট্যান্সকে ১০০টি যুগপৎ সংযোগে সীমাবদ্ধ করে)।
  • যেকোনো ডেটাবেস "owner" স্ট্রিংটিকে অ্যাডমিন অথোরাইজেশন টোকেন হিসেবে গ্রহণ করবে।
  • এমুলেটরগুলোর বর্তমানে অন্যান্য ফায়ারবেস প্রোডাক্টের সাথে কার্যকরী ইন্টারঅ্যাকশন নেই। উল্লেখ্য, সাধারণ ফায়ারবেস অথেনটিকেশন প্রক্রিয়া কাজ করে না। এর পরিবর্তে, আপনি rules-unit-testing লাইব্রেরির initializeTestApp() মেথডটি ব্যবহার করতে পারেন, যেটি একটি auth ফিল্ড গ্রহণ করে। এই মেথড ব্যবহার করে তৈরি করা ফায়ারবেস অবজেক্টটি এমনভাবে আচরণ করে যেন এটি আপনার দেওয়া যেকোনো এনটিটি হিসেবে সফলভাবে অথেনটিকেটেড হয়েছে। আপনি যদি null পাস করেন, তবে এটি একজন আনঅথেনটিকেটেড ব্যবহারকারীর মতো আচরণ করবে (উদাহরণস্বরূপ, auth != null রুলগুলো ব্যর্থ হবে)।

Realtime Database এমুলেটরের সাথে ইন্টারঅ্যাক্ট করা

একটি প্রোডাকশন ফায়ারবেস Realtime Database ইনস্ট্যান্স firebaseio.com এর একটি সাবডোমেইনে অ্যাক্সেসযোগ্য, এবং আপনি এইভাবে REST API অ্যাক্সেস করতে পারেন:

https://<database_name>.firebaseio.com/path/to/my/data.json

এমুলেটরটি স্থানীয়ভাবে চলে এবং localhost:9000 এ উপলব্ধ। কোনো নির্দিষ্ট ডাটাবেস ইনস্ট্যান্সের সাথে ইন্টারঅ্যাক্ট করতে, আপনাকে ডাটাবেসের নাম উল্লেখ করার জন্য ns কোয়েরি প্যারামিটার ব্যবহার করতে হবে।

http://localhost:9000/path/to/my/data.json?ns=<database_name>

সংস্করণ ৯ জাভাস্ক্রিপ্ট এসডিকে দিয়ে স্থানীয় ইউনিট টেস্ট চালান

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

স্থানীয়ভাবে চলমান এমুলেটরের সাথে ইন্টারঅ্যাক্ট করার জন্য @firebase/rules-unit-testing মডিউলটি ব্যবহার করুন। যদি আপনি টাইমআউট বা ECONNREFUSED এরর পান, তবে এমুলেটরটি আসলেই চলছে কিনা তা পুনরায় যাচাই করুন।

আমরা Node.js-এর একটি সাম্প্রতিক সংস্করণ ব্যবহার করার জন্য দৃঢ়ভাবে সুপারিশ করছি, যাতে আপনি async/await নোটেশন ব্যবহার করতে পারেন। আপনি যে আচরণগুলো পরীক্ষা করতে চাইতে পারেন তার প্রায় সবই অ্যাসিঙ্ক্রোনাস ফাংশনের সাথে জড়িত, এবং টেস্টিং মডিউলটি প্রমিজ-ভিত্তিক কোডের সাথে কাজ করার জন্য ডিজাইন করা হয়েছে।

v9 Rules ইউনিট টেস্টিং লাইব্রেরিটি এমুলেটরগুলো সম্পর্কে সর্বদা অবগত থাকে এবং আপনার প্রোডাকশন রিসোর্সকে কখনো স্পর্শ করে না।

আপনি v9 মডিউলার ইম্পোর্ট স্টেটমেন্ট ব্যবহার করে লাইব্রেরিটি ইম্পোর্ট করতে পারেন। উদাহরণস্বরূপ:

import {
  assertFails,
  assertSucceeds,
  initializeTestEnvironment
} from "@firebase/rules-unit-testing"

// Use `const { … } = require("@firebase/rules-unit-testing")` if imports are not supported
// Or we suggest `const testing = require("@firebase/rules-unit-testing")` if necessary.

একবার ইম্পোর্ট করা হয়ে গেলে, ইউনিট টেস্ট বাস্তবায়ন করতে নিম্নলিখিত ধাপগুলো অনুসরণ করতে হয়:

  • initializeTestEnvironment কল করার মাধ্যমে একটি RulesTestEnvironment তৈরি এবং কনফিগার করা।
  • Security Rules ট্রিগার না করেই টেস্ট ডেটা সেট আপ করা, একটি সুবিধাজনক পদ্ধতি ব্যবহার করে যা আপনাকে সাময়িকভাবে সেগুলোকে বাইপাস করার সুযোগ দেয়, RulesTestEnvironment.withSecurityRulesDisabled
  • টেস্ট ডেটা এবং এনভায়রনমেন্ট পরিষ্কার করার জন্য টেস্ট স্যুট এবং প্রতিটি টেস্টের জন্য বিফোর/আফটার হুক সেট আপ করা, যেমন RulesTestEnvironment.cleanup() বা RulesTestEnvironment.clearFirestore()
  • RulesTestEnvironment.authenticatedContext এবং RulesTestEnvironment.unauthenticatedContext ব্যবহার করে প্রমাণীকরণ অবস্থা অনুকরণকারী টেস্ট কেস বাস্তবায়ন করা।

সাধারণ পদ্ধতি এবং উপযোগিতা ফাংশন

মডিউলার এপিআই ব্যবহার করে এমুলেটর-নির্দিষ্ট পরীক্ষার পদ্ধতিগুলোও দেখুন।

initializeTestEnvironment() => RulesTestEnvironment

এই ফাংশনটি রুলস ইউনিট টেস্টিং-এর জন্য একটি টেস্ট এনভায়রনমেন্ট চালু করে। টেস্ট সেটআপের জন্য প্রথমে এই ফাংশনটি কল করুন। সফলভাবে কার্য সম্পাদনের জন্য এমুলেটরগুলো চালু থাকা আবশ্যক।

ফাংশনটি একটি ঐচ্ছিক অবজেক্ট গ্রহণ করে যা একটি TestEnvironmentConfig নির্ধারণ করে, এবং এতে একটি প্রজেক্ট আইডি ও এমুলেটর কনফিগারেশন সেটিংস থাকতে পারে।

let testEnv = await initializeTestEnvironment({
  projectId: "demo-project-1234",
  firestore: {
    rules: fs.readFileSync("firestore.rules", "utf8"),
  },
});

RulesTestEnvironment.authenticatedContext({ user_id: string, tokenOptions?: TokenOptions }) => RulesTestContext

এই মেথডটি একটি RulesTestContext তৈরি করে, যা একজন প্রমাণীকৃত Authentication ব্যবহারকারীর মতো আচরণ করে। ফেরত আসা কনটেক্সটের মাধ্যমে তৈরি করা রিকোয়েস্টগুলোর সাথে একটি মক Authentication টোকেন সংযুক্ত থাকবে। ঐচ্ছিকভাবে, Authentication টোকেন পেলোডের জন্য কাস্টম ক্লেইম বা ওভাররাইড সংজ্ঞায়িত করে এমন একটি অবজেক্ট পাস করতে পারেন।

আপনার টেস্টে ফেরত আসা টেস্ট কনটেক্সট অবজেক্টটি ব্যবহার করে initializeTestEnvironment দিয়ে কনফিগার করা এমুলেটর ইনস্ট্যান্সগুলো সহ কনফিগার করা যেকোনো এমুলেটর ইনস্ট্যান্স অ্যাক্সেস করুন।

// Assuming a Firestore app and the Firestore emulator for this example
import { setDoc } from "firebase/firestore";

const alice = testEnv.authenticatedContext("alice", {  });
// Use the Firestore instance associated with this context
await assertSucceeds(setDoc(alice.firestore().doc('/users/alice'), { ... });

RulesTestEnvironment.unauthenticatedContext() => RulesTestContext

এই মেথডটি একটি RulesTestContext তৈরি করে, যা এমন একজন ক্লায়েন্টের মতো আচরণ করে যে Authentication মাধ্যমে লগ ইন করেনি। ফেরত আসা কনটেক্সটের মাধ্যমে তৈরি করা রিকোয়েস্টগুলোর সাথে Firebase Auth টোকেন সংযুক্ত থাকবে না।

আপনার টেস্টে ফেরত আসা টেস্ট কনটেক্সট অবজেক্টটি ব্যবহার করে initializeTestEnvironment দিয়ে কনফিগার করা এমুলেটর ইনস্ট্যান্সগুলো সহ কনফিগার করা যেকোনো এমুলেটর ইনস্ট্যান্স অ্যাক্সেস করুন।

// Assuming a Cloud Storage app and the Storage emulator for this example
import { getStorage, ref, deleteObject } from "firebase/storage";

const alice = testEnv.unauthenticatedContext();

// Use the Cloud Storage instance associated with this context
const desertRef = ref(alice.storage(), 'images/desert.jpg');
await assertSucceeds(deleteObject(desertRef));

RulesTestEnvironment.withSecurityRulesDisabled()

এমন একটি কনটেক্সট ব্যবহার করে একটি টেস্ট সেটআপ ফাংশন চালান, যা সিকিউরিটি রুলস নিষ্ক্রিয় থাকার মতো আচরণ করে।

এই মেথডটি একটি কলব্যাক ফাংশন গ্রহণ করে, যা সিকিউরিটি-রুল-বাইপাসিং কনটেক্সটটি নেয় এবং একটি প্রমিজ রিটার্ন করে। প্রমিজটি রিজলভ বা রিজেক্ট হলে কনটেক্সটটি ডেস্ট্রয় হয়ে যাবে।

RulesTestEnvironment.cleanup()

এই পদ্ধতিটি টেস্ট এনভায়রনমেন্টে তৈরি হওয়া সমস্ত RulesTestContexts ধ্বংস করে এবং অন্তর্নিহিত রিসোর্সগুলো পরিষ্কার করে, যার ফলে সুষ্ঠুভাবে প্রস্থান করা যায়।

এই পদ্ধতি এমুলেটরগুলির অবস্থা কোনোভাবেই পরিবর্তন করে না। টেস্টগুলির মধ্যে ডেটা রিসেট করতে, অ্যাপ্লিকেশন এমুলেটর-নির্দিষ্ট ক্লিয়ার ডেটা পদ্ধতিটি ব্যবহার করুন।

assertSucceeds(pr: Promise<any>)) => Promise<any>

এটি একটি টেস্ট কেস ইউটিলিটি ফাংশন।

ফাংশনটি এই মর্মে নিশ্চয়তা প্রদান করে যে, একটি এমুলেটর অপারেশনকে আবৃতকারী সরবরাহকৃত প্রমিসটি কোনো নিরাপত্তা বিধি লঙ্ঘন ছাড়াই সমাধান করা হবে।

await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });

assertFails(pr: Promise<any>)) => Promise<any>

এটি একটি টেস্ট কেস ইউটিলিটি ফাংশন।

ফাংশনটি দাবি করে যে, একটি এমুলেটর অপারেশনকে আবৃত করে থাকা সরবরাহকৃত প্রমিসটি সিকিউরিটি রুলস লঙ্ঘনের কারণে প্রত্যাখ্যাত হবে।

await assertFails(setDoc(alice.firestore(), '/users/bob'), { ... });

এমুলেটর-নির্দিষ্ট পদ্ধতি

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

Cloud Firestore

Cloud Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

এই পদ্ধতিটি ফায়ারস্টোর এমুলেটরের জন্য কনফিগার করা projectId এর অন্তর্গত ফায়ারস্টোর ডেটাবেসের ডেটা মুছে ফেলে।

RulesTestContext.firestore(settings?: Firestore.FirestoreSettings) => Firestore;

এই মেথডটি এই টেস্ট কনটেক্সটের জন্য একটি ফায়ারস্টোর ইনস্ট্যান্স সংগ্রহ করে। ফেরত আসা ফায়ারবেস জেএস ক্লায়েন্ট এসডিকে ইনস্ট্যান্সটি ক্লায়েন্ট এসডিকে এপিআই (v9 মডিউলার বা v9 কম্প্যাট) এর সাথে ব্যবহার করা যেতে পারে।

Realtime Database

Realtime Database

RulesTestEnvironment.clearDatabase() => Promise<void>

এই পদ্ধতিটি Realtime Database এমুলেটরের জন্য কনফিগার করা projectId এর অন্তর্গত Realtime Database ডেটা মুছে ফেলে।

RulesTestContext.database(databaseURL?: Firestore.FirestoreSettings) => Firestore;

এই টেস্ট কনটেক্সটের জন্য একটি Realtime Database ইনস্ট্যান্স নিন। ফেরত আসা ফায়ারবেস জেএস ক্লায়েন্ট এসডিকে ইনস্ট্যান্সটি ক্লায়েন্ট এসডিকে এপিআই (মডিউলার বা নেমস্পেসড, সংস্করণ ৯ বা তার বেশি) এর সাথে ব্যবহার করা যেতে পারে। এই মেথডটি রিয়েলটাইম ডেটাবেস ইনস্ট্যান্সের একটি ইউআরএল গ্রহণ করে। যদি নির্দিষ্ট করা থাকে, তবে এটি ইউআরএল থেকে নেওয়া প্যারামিটারসহ নেমস্পেসের একটি অনুকৃত সংস্করণের ইনস্ট্যান্স ফেরত দেয়।

Cloud Storage

Cloud Storage

RulesTestEnvironment.clearStorage() => Promise<void>

এই পদ্ধতিটি Cloud Storage এমুলেটরের জন্য কনফিগার করা projectId এর অন্তর্গত স্টোরেজ বাকেটগুলিতে থাকা অবজেক্ট এবং মেটাডেটা মুছে ফেলে।

RulesTestContext.storage(bucketUrl?: string) => Firebase Storage;

এই মেথডটি এমুলেটরের সাথে সংযোগ করার জন্য কনফিগার করা একটি স্টোরেজ ইনস্ট্যান্স রিটার্ন করে। মেথডটি পরীক্ষার জন্য ফায়ারবেস স্টোরেজ বাকেটের একটি gs:// ইউআরএল গ্রহণ করে। যদি নির্দিষ্ট করা থাকে, তবে এটি উক্ত বাকেট নামের একটি এমুলেটেড সংস্করণের জন্য স্টোরেজ ইনস্ট্যান্স রিটার্ন করে।

v8 জাভাস্ক্রিপ্ট SDK ব্যবহার করে স্থানীয় ইউনিট টেস্ট চালান

এমুলেটরের সাথে ইন্টারফেস করার জন্য Firebase Test SDK যে পদ্ধতিগুলো ব্যবহার করে, তা দেখতে একটি প্রোডাক্ট নির্বাচন করুন।

Cloud Firestore

initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp

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

firebase.initializeTestApp({
  projectId: "my-test-project",
  auth: { uid: "alice", email: "alice@example.com" }
});

initializeAdminApp({ projectId: string }) => FirebaseApp

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

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] এই মেথডটি বর্তমানে চালু থাকা সমস্ত টেস্ট এবং অ্যাডমিন অ্যাপ রিটার্ন করে। টেস্টের মাঝে বা পরে অ্যাপগুলো পরিষ্কার করতে এটি ব্যবহার করুন।

Promise.all(firebase.apps().map(app => app.delete()))

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

এই মেথডটি স্থানীয়ভাবে চলমান একটি ডাটাবেসে নিয়মাবলী পাঠায়। এটি একটি অবজেক্ট গ্রহণ করে, যা নিয়মাবলীকে একটি স্ট্রিং হিসেবে নির্দিষ্ট করে। আপনার ডাটাবেসের নিয়মাবলী সেট করতে এই মেথডটি ব্যবহার করুন।

firebase.loadFirestoreRules({
  projectId: "my-test-project",
  rules: fs.readFileSync("/path/to/firestore.rules", "utf8")
});
    

assertFails(pr: Promise) => Promise

এই মেথডটি একটি প্রমিজ রিটার্ন করে, যা ইনপুট সফল হলে রিজেক্ট হয় অথবা ইনপুট প্রত্যাখ্যাত হলে সফল হয়। ডাটাবেস রিড বা রাইট ব্যর্থ হয়েছে কিনা তা অ্যাসার্ট করতে এটি ব্যবহার করুন।

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    

assertSucceeds(pr: Promise) => Promise

এই মেথডটি একটি প্রমিজ রিটার্ন করে, যা ইনপুট সফল হলে 'succeed' এবং ইনপুট প্রত্যাখ্যাত হলে 'rejected' হয়। ডাটাবেস রিড বা রাইট সফল হয়েছে কিনা তা অ্যাসার্ট করতে এটি ব্যবহার করুন।

firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
    

clearFirestoreData({ projectId: string }) => Promise

এই মেথডটি স্থানীয়ভাবে চলমান ফায়ারস্টোর ইনস্ট্যান্সে একটি নির্দিষ্ট প্রজেক্টের সাথে যুক্ত সমস্ত ডেটা মুছে ফেলে। টেস্টের পরে পরিষ্কার-পরিচ্ছন্নতার জন্য এই মেথডটি ব্যবহার করুন।

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

Realtime Database

Realtime Database

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

পরীক্ষার জন্য কোনো নির্দিষ্ট ব্যবহারকারী হিসেবে প্রমাণীকৃত একটি অ্যাপ তৈরি করতে এটি ব্যবহার করুন।

অপশনে নির্দিষ্ট করা ডাটাবেসের নাম এবং অথ ভেরিয়েবল ওভাররাইড অনুযায়ী একটি ইনিশিয়ালাইজড ফায়ারবেস অ্যাপ ফেরত দেয়।

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

টেস্টের জন্য স্টেট সেট আপ করতে, অ্যাডমিন হিসেবে প্রমাণীকৃত একটি অ্যাপ তৈরি করতে এটি ব্যবহার করুন।

অপশনে নির্দিষ্ট করা ডাটাবেসের নামের সাথে সঙ্গতিপূর্ণ একটি ইনিশিয়ালাইজড অ্যাডমিন ফায়ারবেস অ্যাপ ফেরত দেয়। এই অ্যাপটি ডাটাবেসে পড়া এবং লেখার সময় নিরাপত্তা নিয়মগুলো এড়িয়ে যায়।

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

আপনার ডাটাবেসের নিয়মকানুন নির্ধারণ করতে এটি ব্যবহার করুন।

স্থানীয়ভাবে চলমান একটি ডাটাবেসে নিয়মাবলী পাঠায়। এটি একটি অপশনস অবজেক্ট গ্রহণ করে, যেখানে আপনার "databaseName" এবং "rules" স্ট্রিং হিসেবে নির্দিষ্ট করা থাকে।

firebase
      .loadDatabaseRules({
        databaseName: "my-database",
        rules: "{'rules': {'.read': false, '.write': false}}"
      });

apps() => [FirebaseApp]

বর্তমানে চালু থাকা সমস্ত টেস্ট এবং অ্যাডমিন অ্যাপগুলো ফেরত দেয়।

টেস্টের মাঝে বা পরে অ্যাপ পরিষ্কার করতে এটি ব্যবহার করুন (মনে রাখবেন যে সক্রিয় লিসেনার সহ ইনিশিয়ালাইজ করা অ্যাপ জাভাস্ক্রিপ্টকে এক্সিট করতে বাধা দেয়):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

একটি প্রমিজ রিটার্ন করে যা ইনপুট সফল হলে রিজেক্ট হয় এবং ইনপুট প্রত্যাখ্যাত হলে সফল হয়।

ডাটাবেস রিড বা রাইট ব্যর্থ হয়েছে কিনা তা নিশ্চিত করতে এটি ব্যবহার করুন:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

একটি প্রমিজ রিটার্ন করে যা ইনপুট সফল হলে 'success' এবং ইনপুট প্রত্যাখ্যাত হলে 'rejected' হয়।

ডাটাবেস থেকে ডেটা পড়া বা লেখা সফল হয়েছে কিনা তা নিশ্চিত করতে এটি ব্যবহার করুন:

firebase.assertSucceeds(app.database().ref("public").once("value"));

Cloud Storage

Cloud Storage

initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp

পরীক্ষার জন্য কোনো নির্দিষ্ট ব্যবহারকারী হিসেবে প্রমাণীকৃত একটি অ্যাপ তৈরি করতে এটি ব্যবহার করুন।

অপশনে নির্দিষ্ট করা স্টোরেজ বাকেটের নাম এবং অথোরাইজেশন ভেরিয়েবল ওভাররাইড অনুযায়ী একটি ইনিশিয়ালাইজড ফায়ারবেস অ্যাপ ফেরত দেয়।

firebase.initializeTestApp({
  storageBucket: "my-bucket",
  auth: { uid: "alice" }
});

initializeAdminApp({ storageBucket: string }) => FirebaseApp

টেস্টের জন্য স্টেট সেট আপ করতে, অ্যাডমিন হিসেবে প্রমাণীকৃত একটি অ্যাপ তৈরি করতে এটি ব্যবহার করুন।

অপশনে নির্দিষ্ট করা স্টোরেজ বাকেটের নামের সাথে সঙ্গতিপূর্ণ একটি ইনিশিয়ালাইজড অ্যাডমিন ফায়ারবেস অ্যাপ রিটার্ন করে। এই অ্যাপটি বাকেটে পড়া এবং লেখার সময় নিরাপত্তা নিয়মগুলো এড়িয়ে যায়।

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

আপনার স্টোরেজ বাকেটের নিয়মকানুন নির্ধারণ করতে এটি ব্যবহার করুন।

স্থানীয়ভাবে পরিচালিত স্টোরেজ বাকেটগুলিতে নিয়মাবলী পাঠায়। এটি একটি অপশনস অবজেক্ট গ্রহণ করে, যেখানে আপনার "storageBucket" এবং "rules" স্ট্রিং হিসেবে নির্দিষ্ট করা থাকে।

firebase
      .loadStorageRules({
        storageBucket: "my-bucket",
        rules: fs.readFileSync("/path/to/storage.rules", "utf8")
      });

apps() => [FirebaseApp]

বর্তমানে চালু থাকা সমস্ত টেস্ট এবং অ্যাডমিন অ্যাপগুলো ফেরত দেয়।

টেস্টের মাঝে বা পরে অ্যাপ পরিষ্কার করতে এটি ব্যবহার করুন (মনে রাখবেন যে সক্রিয় লিসেনার সহ ইনিশিয়ালাইজ করা অ্যাপ জাভাস্ক্রিপ্টকে এক্সিট করতে বাধা দেয়):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

একটি প্রমিজ রিটার্ন করে যা ইনপুট সফল হলে রিজেক্ট হয় এবং ইনপুট প্রত্যাখ্যাত হলে সফল হয়।

স্টোরেজ বাকেটের রিড বা রাইট ব্যর্থ হয়েছে কিনা তা নিশ্চিত করতে এটি ব্যবহার করুন:

firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());

assertSucceeds(pr: Promise) => Promise

একটি প্রমিজ রিটার্ন করে যা ইনপুট সফল হলে 'success' এবং ইনপুট প্রত্যাখ্যাত হলে 'rejected' হয়।

স্টোরেজ বাকেটে রিড বা রাইট সফল হয়েছে কিনা তা নিশ্চিত করতে এটি ব্যবহার করুন:

firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());

JS SDK v8 এর জন্য RUT লাইব্রেরি API

এমুলেটরের সাথে ইন্টারফেস করার জন্য Firebase Test SDK যে পদ্ধতিগুলো ব্যবহার করে, তা দেখতে একটি প্রোডাক্ট নির্বাচন করুন।

Cloud Firestore

Cloud Firestore

initializeTestApp({ projectId: string, auth: Object }) => FirebaseApp

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

firebase.initializeTestApp({
  projectId: "my-test-project",
  auth: { uid: "alice", email: "alice@example.com" }
});

initializeAdminApp({ projectId: string }) => FirebaseApp

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

firebase.initializeAdminApp({ projectId: "my-test-project" });
    

apps() => [FirebaseApp] এই মেথডটি বর্তমানে চালু থাকা সমস্ত টেস্ট এবং অ্যাডমিন অ্যাপ রিটার্ন করে। টেস্টের মাঝে বা পরে অ্যাপগুলো পরিষ্কার করতে এটি ব্যবহার করুন।

Promise.all(firebase.apps().map(app => app.delete()))

loadFirestoreRules({ projectId: string, rules: Object }) => Promise

এই মেথডটি স্থানীয়ভাবে চলমান একটি ডাটাবেসে নিয়মাবলী পাঠায়। এটি একটি অবজেক্ট গ্রহণ করে, যা নিয়মাবলীকে একটি স্ট্রিং হিসেবে নির্দিষ্ট করে। আপনার ডাটাবেসের নিয়মাবলী সেট করতে এই মেথডটি ব্যবহার করুন।

firebase.loadFirestoreRules({
  projectId: "my-test-project",
  rules: fs.readFileSync("/path/to/firestore.rules", "utf8")
});
    

assertFails(pr: Promise) => Promise

এই মেথডটি একটি প্রমিজ রিটার্ন করে, যা ইনপুট সফল হলে রিজেক্ট হয় অথবা ইনপুট প্রত্যাখ্যাত হলে সফল হয়। ডাটাবেস রিড বা রাইট ব্যর্থ হয়েছে কিনা তা অ্যাসার্ট করতে এটি ব্যবহার করুন।

firebase.assertFails(app.firestore().collection("private").doc("super-secret-document").get());
    

assertSucceeds(pr: Promise) => Promise

এই মেথডটি একটি প্রমিজ রিটার্ন করে, যা ইনপুট সফল হলে 'succeed' এবং ইনপুট প্রত্যাখ্যাত হলে 'rejected' হয়। ডাটাবেস রিড বা রাইট সফল হয়েছে কিনা তা অ্যাসার্ট করতে এটি ব্যবহার করুন।

firebase.assertSucceeds(app.firestore().collection("public").doc("test-document").get());
    

clearFirestoreData({ projectId: string }) => Promise

এই মেথডটি স্থানীয়ভাবে চলমান ফায়ারস্টোর ইনস্ট্যান্সে একটি নির্দিষ্ট প্রজেক্টের সাথে যুক্ত সমস্ত ডেটা মুছে ফেলে। টেস্টের পরে পরিষ্কার-পরিচ্ছন্নতার জন্য এই মেথডটি ব্যবহার করুন।

firebase.clearFirestoreData({
  projectId: "my-test-project"
});
   

Realtime Database

Realtime Database

initializeTestApp({ databaseName: string, auth: Object }) => FirebaseApp

পরীক্ষার জন্য কোনো নির্দিষ্ট ব্যবহারকারী হিসেবে প্রমাণীকৃত একটি অ্যাপ তৈরি করতে এটি ব্যবহার করুন।

অপশনে নির্দিষ্ট করা ডাটাবেসের নাম এবং অথ ভেরিয়েবল ওভাররাইড অনুযায়ী একটি ইনিশিয়ালাইজড ফায়ারবেস অ্যাপ ফেরত দেয়।

firebase.initializeTestApp({
  databaseName: "my-database",
  auth: { uid: "alice" }
});

initializeAdminApp({ databaseName: string }) => FirebaseApp

টেস্টের জন্য স্টেট সেট আপ করতে, অ্যাডমিন হিসেবে প্রমাণীকৃত একটি অ্যাপ তৈরি করতে এটি ব্যবহার করুন।

অপশনে নির্দিষ্ট করা ডাটাবেসের নামের সাথে সঙ্গতিপূর্ণ একটি ইনিশিয়ালাইজড অ্যাডমিন ফায়ারবেস অ্যাপ ফেরত দেয়। এই অ্যাপটি ডাটাবেসে পড়া এবং লেখার সময় নিরাপত্তা নিয়মগুলো এড়িয়ে যায়।

firebase.initializeAdminApp({ databaseName: "my-database" });

loadDatabaseRules({ databaseName: string, rules: Object }) => Promise

আপনার ডাটাবেসের নিয়মকানুন নির্ধারণ করতে এটি ব্যবহার করুন।

স্থানীয়ভাবে চলমান একটি ডাটাবেসে নিয়মাবলী পাঠায়। এটি একটি অপশনস অবজেক্ট গ্রহণ করে, যেখানে আপনার "databaseName" এবং "rules" স্ট্রিং হিসেবে নির্দিষ্ট করা থাকে।

firebase
      .loadDatabaseRules({
        databaseName: "my-database",
        rules: "{'rules': {'.read': false, '.write': false}}"
      });

apps() => [FirebaseApp]

বর্তমানে চালু থাকা সমস্ত টেস্ট এবং অ্যাডমিন অ্যাপগুলো ফেরত দেয়।

টেস্টের মাঝে বা পরে অ্যাপ পরিষ্কার করতে এটি ব্যবহার করুন (মনে রাখবেন যে সক্রিয় লিসেনার সহ ইনিশিয়ালাইজ করা অ্যাপ জাভাস্ক্রিপ্টকে এক্সিট করতে বাধা দেয়):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

একটি প্রমিজ রিটার্ন করে যা ইনপুট সফল হলে রিজেক্ট হয় এবং ইনপুট প্রত্যাখ্যাত হলে সফল হয়।

ডাটাবেস রিড বা রাইট ব্যর্থ হয়েছে কিনা তা নিশ্চিত করতে এটি ব্যবহার করুন:

firebase.assertFails(app.database().ref("secret").once("value"));

assertSucceeds(pr: Promise) => Promise

একটি প্রমিজ রিটার্ন করে যা ইনপুট সফল হলে 'success' এবং ইনপুট প্রত্যাখ্যাত হলে 'rejected' হয়।

ডাটাবেস থেকে ডেটা পড়া বা লেখা সফল হয়েছে কিনা তা নিশ্চিত করতে এটি ব্যবহার করুন:

firebase.assertSucceeds(app.database().ref("public").once("value"));

Cloud Storage

Cloud Storage

initializeTestApp({ storageBucket: string, auth: Object }) => FirebaseApp

পরীক্ষার জন্য কোনো নির্দিষ্ট ব্যবহারকারী হিসেবে প্রমাণীকৃত একটি অ্যাপ তৈরি করতে এটি ব্যবহার করুন।

অপশনে নির্দিষ্ট করা স্টোরেজ বাকেটের নাম এবং অথোরাইজেশন ভেরিয়েবল ওভাররাইড অনুযায়ী একটি ইনিশিয়ালাইজড ফায়ারবেস অ্যাপ ফেরত দেয়।

firebase.initializeTestApp({
  storageBucket: "my-bucket",
  auth: { uid: "alice" }
});

initializeAdminApp({ storageBucket: string }) => FirebaseApp

টেস্টের জন্য স্টেট সেট আপ করতে, অ্যাডমিন হিসেবে প্রমাণীকৃত একটি অ্যাপ তৈরি করতে এটি ব্যবহার করুন।

অপশনে নির্দিষ্ট করা স্টোরেজ বাকেটের নামের সাথে সঙ্গতিপূর্ণ একটি ইনিশিয়ালাইজড অ্যাডমিন ফায়ারবেস অ্যাপ রিটার্ন করে। এই অ্যাপটি বাকেটে পড়া এবং লেখার সময় নিরাপত্তা নিয়মগুলো এড়িয়ে যায়।

firebase.initializeAdminApp({ storageBucket: "my-bucket" });

loadStorageRules({ storageBucket: string, rules: Object }) => Promise

আপনার স্টোরেজ বাকেটের নিয়মকানুন নির্ধারণ করতে এটি ব্যবহার করুন।

স্থানীয়ভাবে পরিচালিত স্টোরেজ বাকেটগুলিতে নিয়মাবলী পাঠায়। এটি একটি অপশনস অবজেক্ট গ্রহণ করে, যেখানে আপনার "storageBucket" এবং "rules" স্ট্রিং হিসেবে নির্দিষ্ট করা থাকে।

firebase
      .loadStorageRules({
        storageBucket: "my-bucket",
        rules: fs.readFileSync("/path/to/storage.rules", "utf8")
      });

apps() => [FirebaseApp]

বর্তমানে চালু থাকা সমস্ত টেস্ট এবং অ্যাডমিন অ্যাপগুলো ফেরত দেয়।

টেস্টের মাঝে বা পরে অ্যাপ পরিষ্কার করতে এটি ব্যবহার করুন (মনে রাখবেন যে সক্রিয় লিসেনার সহ ইনিশিয়ালাইজ করা অ্যাপ জাভাস্ক্রিপ্টকে এক্সিট করতে বাধা দেয়):

 Promise.all(firebase.apps().map(app => app.delete()))

assertFails(pr: Promise) => Promise

একটি প্রমিজ রিটার্ন করে যা ইনপুট সফল হলে রিজেক্ট হয় এবং ইনপুট প্রত্যাখ্যাত হলে সফল হয়।

স্টোরেজ বাকেটের রিড বা রাইট ব্যর্থ হয়েছে কিনা তা নিশ্চিত করতে এটি ব্যবহার করুন:

firebase.assertFails(app.storage().ref("letters/private.doc").getMetadata());

assertSucceeds(pr: Promise) => Promise

একটি প্রমিজ রিটার্ন করে যা ইনপুট সফল হলে 'success' এবং ইনপুট প্রত্যাখ্যাত হলে 'rejected' হয়।

স্টোরেজ বাকেটে রিড বা রাইট সফল হয়েছে কিনা তা নিশ্চিত করতে এটি ব্যবহার করুন:

firebase.assertFails(app.storage().ref("images/cat.png").getMetadata());