تست های واحد بسازید

Firebase Local Emulator Suite اعتبارسنجی کامل ویژگی‌ها و رفتار برنامه شما را آسان‌تر می‌کند. همچنین ابزاری عالی برای تأیید پیکربندی‌های Firebase Security Rules شماست. از شبیه‌سازهای Firebase برای اجرا و خودکارسازی تست‌های واحد در یک محیط محلی استفاده کنید. روش‌های ذکر شده در این سند باید به شما در ساخت و خودکارسازی تست‌های واحد برای برنامه‌تان که Rules شما را اعتبارسنجی می‌کنند، کمک کند.

اگر قبلاً این کار را نکرده‌اید، شبیه‌سازهای Firebase را راه‌اندازی کنید .

قبل از اجرای شبیه‌ساز

قبل از شروع استفاده از شبیه‌ساز، موارد زیر را در نظر داشته باشید:

  • شبیه‌ساز در ابتدا قوانین مشخص شده در فیلد firestore.rules یا storage.rules از فایل firebase.json شما را بارگذاری می‌کند. اگر این فایل وجود نداشته باشد و شما از متد loadFirestoreRules یا loadStorageRules همانطور که در زیر توضیح داده شده است استفاده نکنید، شبیه‌ساز با تمام پروژه‌ها به عنوان پروژه‌هایی که دارای قوانین باز هستند رفتار می‌کند.
  • در حالی که اکثر کیت‌های توسعه نرم‌افزار فایربیس (Firebase SDK) مستقیماً با شبیه‌سازها کار می‌کنند، فقط کتابخانه @firebase/rules-unit-testing از شبیه‌سازی احراز auth در قوانین امنیتی (Security Rules) پشتیبانی می‌کند و تست‌های واحد را بسیار آسان‌تر می‌کند. علاوه بر این، این کتابخانه از چند ویژگی خاص شبیه‌ساز مانند پاک کردن تمام داده‌ها، همانطور که در زیر ذکر شده است، پشتیبانی می‌کند.
  • این شبیه‌سازها همچنین توکن‌های تأیید اعتبار Firebase ارائه شده از طریق SDKهای کلاینت را می‌پذیرند و بر اساس آنها قوانین را ارزیابی می‌کنند، که امکان اتصال مستقیم برنامه شما به شبیه‌سازها را در تست‌های یکپارچه‌سازی و دستی فراهم می‌کند.

تفاوت‌های بین شبیه‌سازهای پایگاه داده و محیط عملیاتی

  • لازم نیست صریحاً یک نمونه پایگاه داده ایجاد کنید. شبیه‌ساز به طور خودکار هر نمونه پایگاه داده‌ای را که مورد دسترسی قرار گیرد، ایجاد می‌کند.
  • هر پایگاه داده جدید با قوانین بسته شروع می‌شود، بنابراین کاربران غیر مدیر قادر به خواندن یا نوشتن نخواهند بود.
  • هر پایگاه داده شبیه‌سازی شده، محدودیت‌ها و سهمیه‌های طرح Spark را اعمال می‌کند (مهم‌ترین نکته این است که هر نمونه را به ۱۰۰ اتصال همزمان محدود می‌کند).
  • هر پایگاه داده‌ای رشته "owner" را به عنوان توکن احراز هویت مدیر می‌پذیرد.
  • این شبیه‌سازها در حال حاضر تعامل کاری با سایر محصولات Firebase ندارند. نکته قابل توجه این است که جریان عادی احراز هویت Firebase کار نمی‌کند. در عوض، می‌توانید از متد initializeTestApp() در کتابخانه rules-unit-testing استفاده کنید که یک فیلد auth می‌گیرد. شیء Firebase ایجاد شده با استفاده از این متد طوری رفتار می‌کند که انگار با موفقیت به عنوان هر موجودیتی که ارائه می‌دهید احراز هویت شده است. اگر null را ارسال کنید، مانند یک کاربر احراز هویت نشده رفتار خواهد کرد (برای مثال auth != null rules با شکست مواجه خواهد شد).

تعامل با شبیه‌ساز Realtime Database

یک نمونه Realtime Database Firebase در زیر دامنه firebaseio.com قابل دسترسی است و شما می‌توانید به API REST به این صورت دسترسی داشته باشید:

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

شبیه‌ساز به صورت محلی اجرا می‌شود و در localhost:9000 در دسترس است. برای تعامل با یک نمونه پایگاه داده خاص، باید از پارامتر پرس و جوی ns برای مشخص کردن نام پایگاه داده استفاده کنید.

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

اجرای تست‌های واحد محلی با نسخه ۹ جاوا اسکریپت SDK

فایربیس یک کتابخانه تست واحد قوانین امنیتی را هم با نسخه ۹ جاوا اسکریپت SDK و هم با نسخه ۸ SDK خود توزیع می‌کند. APIهای این کتابخانه تفاوت قابل توجهی دارند. ما کتابخانه تست نسخه ۹ را توصیه می‌کنیم که ساده‌تر است و برای اتصال به شبیه‌سازها به تنظیمات کمتری نیاز دارد و بنابراین با خیال راحت از استفاده تصادفی از منابع تولید جلوگیری می‌کند. برای سازگاری با نسخه‌های قبلی، ما همچنان کتابخانه تست نسخه ۸ را در دسترس قرار می‌دهیم.

از ماژول @firebase/rules-unit-testing برای تعامل با شبیه‌ساز محلی استفاده کنید. اگر با خطای timeout یا ECONNREFUSED مواجه شدید، دوباره بررسی کنید که شبیه‌ساز واقعاً در حال اجرا باشد.

ما اکیداً توصیه می‌کنیم از نسخه اخیر Node.js استفاده کنید تا بتوانید از نمادگذاری async/await استفاده کنید. تقریباً تمام رفتارهایی که ممکن است بخواهید آزمایش کنید شامل توابع ناهمزمان است و ماژول آزمایش برای کار با کد مبتنی بر Promise طراحی شده است.

کتابخانه تست واحد قوانین نسخه ۹ همیشه از شبیه‌سازها آگاه است و هرگز به منابع تولید شما دست نمی‌زند.

شما کتابخانه را با استفاده از دستورات import ماژولار نسخه ۹ وارد می‌کنید. برای مثال:

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.

پس از وارد کردن، پیاده‌سازی تست‌های واحد شامل موارد زیر است:

  • ایجاد و پیکربندی یک RulesTestEnvironment با فراخوانی initializeTestEnvironment .
  • تنظیم داده‌های آزمایشی بدون فعال کردن Rules ، با استفاده از یک روش راحت که به شما امکان می‌دهد موقتاً آنها را دور بزنید، RulesTestEnvironment.withSecurityRulesDisabled .
  • راه‌اندازی مجموعه تست و قلاب‌های قبل/بعد از تست به ازای هر تست با فراخوانی‌هایی برای پاکسازی داده‌های تست و محیط، مانند RulesTestEnvironment.cleanup() یا RulesTestEnvironment.clearFirestore() .
  • پیاده‌سازی موارد آزمایشی که حالت‌های احراز هویت را با استفاده از RulesTestEnvironment.authenticatedContext و RulesTestEnvironment.unauthenticatedContext تقلید می‌کنند.

روش‌های رایج و توابع سودمندی

همچنین به روش‌های تست مخصوص شبیه‌ساز با استفاده از API ماژولار مراجعه کنید.

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 هویت‌شده‌ی احراز هویت رفتار می‌کند. درخواست‌های ایجاد شده از طریق زمینه‌ی برگردانده شده، یک توکن احراز هویت ساختگی (mock Authentication token) ضمیمه خواهند داشت. در صورت تمایل، می‌توانید یک شیء تعریف‌کننده‌ی ادعاها یا لغوهای سفارشی برای بارهای توکن 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 وارد سیستم نشده است. درخواست‌هایی که از طریق context برگردانده می‌شوند، توکن‌های 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()

یک تابع راه‌اندازی آزمایشی را با زمینه‌ای اجرا کنید که طوری رفتار کند که انگار قوانین امنیتی غیرفعال شده‌اند.

این متد یک تابع فراخوانی (callback) می‌گیرد که زمینه‌ی دور زدن قوانین امنیتی (Security-Rules-bypassing context) را می‌گیرد و یک promise را برمی‌گرداند. این زمینه پس از حل/رد promise از بین خواهد رفت.

RulesTestEnvironment.cleanup()

این متد تمام RulesTestContexts ایجاد شده در محیط تست را از بین می‌برد و منابع زیرین را پاک می‌کند و امکان خروج بدون مشکل را فراهم می‌کند.

این روش به هیچ وجه وضعیت شبیه‌سازها را تغییر نمی‌دهد. برای بازنشانی داده‌ها بین آزمایش‌ها، از روش پاک کردن داده‌ها مخصوص شبیه‌ساز برنامه استفاده کنید.

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

این یک تابع سودمندی برای حالت آزمایشی است.

این تابع ادعا می‌کند که Promise ارائه شده که یک عملیات شبیه‌ساز را پوشش می‌دهد، بدون هیچ گونه نقض قوانین امنیتی حل خواهد شد.

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

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

این یک تابع سودمندی برای حالت آزمایشی است.

این تابع ادعا می‌کند که Promise ارائه شده که یک عملیات شبیه‌ساز را پوشش می‌دهد، به دلیل نقض قوانین امنیتی رد خواهد شد.

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

روش‌های خاص شبیه‌ساز

همچنین روش‌های تست رایج و توابع کاربردی با استفاده از API ماژولار را ببینید.

Cloud Firestore

Cloud Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

این متد داده‌های موجود در پایگاه داده Firestore که متعلق به projectId پیکربندی شده برای شبیه‌ساز Firestore هستند را پاک می‌کند.

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

این متد یک نمونه Firestore برای این زمینه آزمایشی دریافت می‌کند. نمونه Firebase JS Client SDK برگردانده شده می‌تواند با APIهای SDK کلاینت (v9 modular یا v9 compat) استفاده شود.

Realtime Database

Realtime Database

RulesTestEnvironment.clearDatabase() => Promise<void>

این متد داده‌های موجود در Realtime Database را که متعلق به projectId پیکربندی شده برای شبیه‌ساز Realtime Database هستند، پاک می‌کند.

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

یک نمونه Realtime Database برای این زمینه آزمایشی دریافت کنید. نمونه Firebase JS Client SDK برگردانده شده می‌تواند با APIهای SDK کلاینت (ماژولار یا namespaced، نسخه 9 یا بالاتر) استفاده شود. این متد یک URL از نمونه پایگاه داده Realtime را می‌پذیرد. در صورت مشخص شدن، نمونه‌ای برای یک نسخه شبیه‌سازی شده از فضای نام با پارامترهای استخراج شده از URL برمی‌گرداند.

Cloud Storage

Cloud Storage

RulesTestEnvironment.clearStorage() => Promise<void>

این متد اشیاء و فراداده‌های موجود در سطل‌های ذخیره‌سازی متعلق به projectId پیکربندی‌شده برای شبیه‌ساز Cloud Storage را پاک می‌کند.

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

این متد یک نمونه Storage که برای اتصال به شبیه‌ساز پیکربندی شده است را برمی‌گرداند. این متد یک آدرس gs:// را برای آزمایش به Firebase Storage Bucket می‌پذیرد. در صورت مشخص شدن، یک نمونه Storage برای نسخه شبیه‌سازی شده نام bucket را برمی‌گرداند.

اجرای تست‌های واحد محلی با SDK جاوا اسکریپت نسخه ۸

برای مشاهده روش‌های استفاده شده توسط Firebase Test SDK برای ارتباط با شبیه‌ساز، یک محصول را انتخاب کنید.

Cloud Firestore

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

این متد یک برنامه Firebase مقداردهی اولیه شده مطابق با شناسه پروژه و متغیر auth مشخص شده در گزینه‌ها را برمی‌گرداند. از این برای ایجاد یک برنامه احراز هویت شده به عنوان یک کاربر خاص برای استفاده در تست‌ها استفاده کنید.

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

initializeAdminApp({ projectId: string }) => FirebaseApp

این متد یک برنامه‌ی Firebase با دسترسی ادمین اولیه را برمی‌گرداند. این برنامه هنگام انجام خواندن و نوشتن، قوانین امنیتی را دور می‌زند. از این برای ایجاد یک برنامه‌ی احراز هویت شده به عنوان ادمین جهت تنظیم وضعیت برای تست‌ها استفاده کنید.

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

این متد یک promise را برمی‌گرداند که در صورت موفقیت‌آمیز بودن ورودی، رد می‌شود یا در صورت رد شدن ورودی، موفق می‌شود. از این برای تأیید عدم موفقیت خواندن یا نوشتن پایگاه داده استفاده کنید.

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

assertSucceeds(pr: Promise) => Promise

این متد یک promise را برمی‌گرداند که در صورت موفقیت‌آمیز بودن ورودی، موفق می‌شود و در صورت رد شدن ورودی، رد می‌شود. از این متد برای بررسی موفقیت‌آمیز بودن خواندن یا نوشتن پایگاه داده استفاده کنید.

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

clearFirestoreData({ projectId: string }) => Promise

این روش تمام داده‌های مرتبط با یک پروژه خاص را در نمونه Firestore که به صورت محلی اجرا می‌شود، پاک می‌کند. از این روش برای پاکسازی پس از تست‌ها استفاده کنید.

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

Realtime Database

Realtime Database

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

از این برای ایجاد یک برنامه که به عنوان یک کاربر خاص برای استفاده در تست‌ها احراز هویت شده است، استفاده کنید.

یک برنامه‌ی فایربیس مقداردهی اولیه شده مطابق با نام پایگاه داده و متغیر auth که در options مقداردهی اولیه شده است را برمی‌گرداند.

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

از این برای ایجاد یک برنامه که به عنوان مدیر احراز هویت شده است استفاده کنید تا وضعیت را برای آزمایش‌ها تنظیم کنید.

یک برنامه‌ی فایربیس ادمین مقداردهی اولیه‌شده مطابق با نام پایگاه داده‌ی مشخص‌شده در options را برمی‌گرداند. این برنامه هنگام خواندن و نوشتن در پایگاه داده، قوانین امنیتی را دور می‌زند.

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

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

از این برای تنظیم قوانین پایگاه داده خود استفاده کنید.

قوانین را به یک پایگاه داده محلی در حال اجرا ارسال می‌کند. یک شیء options می‌گیرد که "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

یک promise را برمی‌گرداند که اگر ورودی موفق باشد، رد می‌شود و اگر ورودی رد شود، موفق می‌شود.

از این برای اعلام عدم موفقیت خواندن یا نوشتن در پایگاه داده استفاده کنید:

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

assertSucceeds(pr: Promise) => Promise

یک promise را برمی‌گرداند که اگر ورودی موفق باشد، موفق می‌شود و اگر ورودی رد شود، رد می‌شود.

از این برای تأیید موفقیت‌آمیز بودن خواندن یا نوشتن پایگاه داده استفاده کنید:

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

Cloud Storage

Cloud Storage

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

از این برای ایجاد یک برنامه که به عنوان یک کاربر خاص برای استفاده در تست‌ها احراز هویت شده است، استفاده کنید.

یک برنامه‌ی فایربیس مقداردهی اولیه شده مطابق با نام مخزن ذخیره‌سازی و متغیر auth که در options مشخص شده است را برمی‌گرداند.

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

از این برای ایجاد یک برنامه که به عنوان مدیر احراز هویت شده است استفاده کنید تا وضعیت را برای آزمایش‌ها تنظیم کنید.

یک برنامه‌ی فایربیس ادمین مقداردهی اولیه‌شده مطابق با نام سطل ذخیره‌سازی مشخص‌شده در گزینه‌ها را برمی‌گرداند. این برنامه هنگام خواندن و نوشتن در سطل، قوانین امنیتی را دور می‌زند.

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

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

از این برای تنظیم قوانین سطل ذخیره‌سازی خود استفاده کنید.

قوانین را به یک مخزن ذخیره‌سازی محلی مدیریت‌شده ارسال می‌کند. یک شیء گزینه‌ها را می‌گیرد که "storageBucket" و "قوانین" شما را به صورت رشته مشخص می‌کند.

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

یک promise را برمی‌گرداند که اگر ورودی موفق باشد، رد می‌شود و اگر ورودی رد شود، موفق می‌شود.

از این دستور برای اعلام عدم موفقیت خواندن یا نوشتن یک سطل ذخیره‌سازی استفاده کنید:

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

assertSucceeds(pr: Promise) => Promise

یک promise را برمی‌گرداند که اگر ورودی موفق باشد، موفق می‌شود و اگر ورودی رد شود، رد می‌شود.

از این برای تأیید موفقیت‌آمیز بودن خواندن یا نوشتن یک سطل ذخیره‌سازی استفاده کنید:

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

API کتابخانه RUT برای JS SDK نسخه ۸

برای مشاهده روش‌های استفاده شده توسط Firebase Test SDK برای ارتباط با شبیه‌ساز، یک محصول را انتخاب کنید.

Cloud Firestore

Cloud Firestore

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

این متد یک برنامه Firebase مقداردهی اولیه شده مطابق با شناسه پروژه و متغیر auth مشخص شده در گزینه‌ها را برمی‌گرداند. از این برای ایجاد یک برنامه احراز هویت شده به عنوان یک کاربر خاص برای استفاده در تست‌ها استفاده کنید.

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

initializeAdminApp({ projectId: string }) => FirebaseApp

این متد یک برنامه‌ی Firebase با دسترسی ادمین اولیه را برمی‌گرداند. این برنامه هنگام انجام خواندن و نوشتن، قوانین امنیتی را دور می‌زند. از این برای ایجاد یک برنامه‌ی احراز هویت شده به عنوان ادمین جهت تنظیم وضعیت برای تست‌ها استفاده کنید.

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

این متد یک promise را برمی‌گرداند که در صورت موفقیت‌آمیز بودن ورودی، رد می‌شود یا در صورت رد شدن ورودی، موفق می‌شود. از این برای تأیید عدم موفقیت خواندن یا نوشتن پایگاه داده استفاده کنید.

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

assertSucceeds(pr: Promise) => Promise

این متد یک promise را برمی‌گرداند که در صورت موفقیت‌آمیز بودن ورودی، موفق می‌شود و در صورت رد شدن ورودی، رد می‌شود. از این متد برای بررسی موفقیت‌آمیز بودن خواندن یا نوشتن پایگاه داده استفاده کنید.

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

clearFirestoreData({ projectId: string }) => Promise

این روش تمام داده‌های مرتبط با یک پروژه خاص را در نمونه Firestore که به صورت محلی اجرا می‌شود، پاک می‌کند. از این روش برای پاکسازی پس از تست‌ها استفاده کنید.

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

Realtime Database

Realtime Database

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

از این برای ایجاد یک برنامه که به عنوان یک کاربر خاص برای استفاده در تست‌ها احراز هویت شده است، استفاده کنید.

یک برنامه‌ی فایربیس مقداردهی اولیه شده مطابق با نام پایگاه داده و متغیر auth که در options مقداردهی اولیه شده است را برمی‌گرداند.

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

از این برای ایجاد یک برنامه که به عنوان مدیر احراز هویت شده است استفاده کنید تا وضعیت را برای آزمایش‌ها تنظیم کنید.

یک برنامه‌ی فایربیس ادمین مقداردهی اولیه‌شده مطابق با نام پایگاه داده‌ی مشخص‌شده در options را برمی‌گرداند. این برنامه هنگام خواندن و نوشتن در پایگاه داده، قوانین امنیتی را دور می‌زند.

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

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

از این برای تنظیم قوانین پایگاه داده خود استفاده کنید.

قوانین را به یک پایگاه داده محلی در حال اجرا ارسال می‌کند. یک شیء options می‌گیرد که "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

یک promise را برمی‌گرداند که اگر ورودی موفق باشد، رد می‌شود و اگر ورودی رد شود، موفق می‌شود.

از این برای اعلام عدم موفقیت خواندن یا نوشتن در پایگاه داده استفاده کنید:

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

assertSucceeds(pr: Promise) => Promise

یک promise را برمی‌گرداند که اگر ورودی موفق باشد، موفق می‌شود و اگر ورودی رد شود، رد می‌شود.

از این برای تأیید موفقیت‌آمیز بودن خواندن یا نوشتن پایگاه داده استفاده کنید:

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

Cloud Storage

Cloud Storage

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

از این برای ایجاد یک برنامه که به عنوان یک کاربر خاص برای استفاده در تست‌ها احراز هویت شده است، استفاده کنید.

یک برنامه‌ی فایربیس مقداردهی اولیه شده مطابق با نام مخزن ذخیره‌سازی و متغیر auth که در options مشخص شده است را برمی‌گرداند.

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

از این برای ایجاد یک برنامه که به عنوان مدیر احراز هویت شده است استفاده کنید تا وضعیت را برای آزمایش‌ها تنظیم کنید.

یک برنامه‌ی فایربیس ادمین مقداردهی اولیه‌شده مطابق با نام سطل ذخیره‌سازی مشخص‌شده در گزینه‌ها را برمی‌گرداند. این برنامه هنگام خواندن و نوشتن در سطل، قوانین امنیتی را دور می‌زند.

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

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

از این برای تنظیم قوانین سطل ذخیره‌سازی خود استفاده کنید.

قوانین را به یک مخزن ذخیره‌سازی محلی مدیریت‌شده ارسال می‌کند. یک شیء گزینه‌ها را می‌گیرد که "storageBucket" و "قوانین" شما را به صورت رشته مشخص می‌کند.

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

یک promise را برمی‌گرداند که اگر ورودی موفق باشد، رد می‌شود و اگر ورودی رد شود، موفق می‌شود.

از این دستور برای اعلام عدم موفقیت خواندن یا نوشتن یک سطل ذخیره‌سازی استفاده کنید:

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

assertSucceeds(pr: Promise) => Promise

یک promise را برمی‌گرداند که اگر ورودی موفق باشد، موفق می‌شود و اگر ورودی رد شود، رد می‌شود.

از این برای تأیید موفقیت‌آمیز بودن خواندن یا نوشتن یک سطل ذخیره‌سازی استفاده کنید:

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