اختبارات الوحدة الإعلانية

Firebase Local Emulator Suite تسهّل عليك هذه الأدوات التحقّق بشكل كامل من ميزات تطبيقك وسلوكه. وهي أيضًا أداة رائعة للتحقّق من إعدادات Firebase Security Rules. استخدِم محاكيات Firebase لتشغيل اختبارات الوحدات وأتمتتها في بيئة محلية. من المفترض أن تساعدك الطرق الموضّحة في هذا المستند في إنشاء اختبارات الوحدات وتنفيذها آليًا لتطبيقك، وهي اختبارات تتحقّق من صحة Rules.

إعداد محاكيات Firebase، في حال لم يسبق لك إجراء ذلك

قبل تشغيل المحاكي

قبل البدء في استخدام المحاكي، يُرجى مراعاة ما يلي:

  • سيحمّل المحاكي في البداية القواعد المحدّدة في الحقل firestore.rules أو الحقل storage.rules في ملف firebase.json. إذا كان الملف غير متوفّر ولم تستخدم الطريقتَين loadFirestoreRules أو loadStorageRules الموضّحتَين أدناه، سيتعامل المحاكي مع جميع المشاريع على أنّها تتضمّن قواعد مفتوحة.
  • في حين أنّ معظم حِزم تطوير البرامج (SDK) من Firebase تعمل مع المحاكيات مباشرةً، لا تتوافق مكتبة @firebase/rules-unit-testing إلا مع authالمحاكاةauth في "قواعد الأمان"، ما يسهّل إجراء اختبارات الوحدات. بالإضافة إلى ذلك، تتيح المكتبة بعض الميزات الخاصة بالمحاكي، مثل محو جميع البيانات، كما هو موضّح أدناه.
  • ستقبل المحاكيات أيضًا رموز Firebase Auth المميزة الخاصة بالإنتاج والمقدَّمة من خلال حِزم تطوير البرامج (SDK) الخاصة بالعميل، وستقيّم القواعد وفقًا لذلك، ما يتيح ربط تطبيقك مباشرةً بالمحاكيات في اختبارات الدمج والاختبارات اليدوية.

الاختلافات بين محاكيات قواعد البيانات وبيئة الإنتاج

  • ليس عليك إنشاء مثيل قاعدة بيانات بشكلٍ صريح. سينشئ المحاكي تلقائيًا أي مثيل قاعدة بيانات يتم الوصول إليه.
  • يتم بدء تشغيل كل قاعدة بيانات جديدة بقواعد مغلقة، وبالتالي لن يتمكّن المستخدمون غير المشرفين من القراءة أو الكتابة.
  • تطبِّق كل قاعدة بيانات محاكية حدود خطة Spark وحصصها (والجدير بالذكر أنّ هذا يحدّ من كل مثيل إلى 100 اتصال متزامن).
  • ستقبل أي قاعدة بيانات السلسلة "owner" كرمز مميّز لمصادقة المشرف.
  • لا تتضمّن المحاكيات حاليًا تفاعلات تعمل مع منتجات Firebase الأخرى. والجدير بالذكر أنّ مسار المصادقة العادي في Firebase لا يعمل. يمكنك بدلاً من ذلك استخدام طريقة initializeTestApp() في مكتبة rules-unit-testing، والتي تأخذ حقل auth. يتصرّف عنصر Firebase الذي تم إنشاؤه باستخدام هذه الطريقة كما لو أنّه تمّت مصادقته بنجاح كأي كيان تقدّمه. إذا أدخلت null، سيتم التعامل معها كمستخدم غير مصادق عليه (لن تنجح قواعد auth != null، على سبيل المثال).

التفاعل مع محاكي Realtime Database

يمكن الوصول إلى مثيل Realtime Database في Firebase مخصّص للإنتاج من خلال نطاق فرعي من firebaseio.com، ويمكنك الوصول إلى واجهة برمجة تطبيقات 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>

إجراء اختبارات الوحدات المحلية باستخدام الإصدار 9 من حزمة تطوير البرامج (SDK) في JavaScript

توزّع Firebase مكتبة لاختبار وحدات &quot;قواعد الأمان&quot; مع كلّ من الإصدار 9 من حزمة JavaScript SDK والإصدار 8 من حزمة SDK. تختلف واجهات برمجة التطبيقات للمكتبة بشكل كبير. ننصحك باستخدام مكتبة الاختبار v9، فهي أكثر سلاسة وتتطلّب إعدادًا أقل للاتصال بالمحاكيات، وبالتالي تجنُّب الاستخدام غير المقصود لموارد الإنتاج بأمان. لضمان التوافق مع الإصدارات القديمة، سنواصل إتاحة مكتبة الاختبار الإصدار 8.

استخدِم وحدة @firebase/rules-unit-testing للتفاعل مع المحاكي الذي يتم تشغيله محليًا. إذا ظهرت لك مهلات أو أخطاء ECONNREFUSED، تحقَّق جيدًا من أنّ المحاكي يعمل بالفعل.

ننصحك بشدة باستخدام إصدار حديث من Node.js حتى تتمكّن من استخدام صيغة async/await. تتضمّن جميع السلوكيات التي قد تريد اختبارها تقريبًا دوالاً غير متزامنة، وقد تم تصميم وحدة الاختبار للعمل مع الرموز البرمجية المستندة إلى Promise.

تدرك مكتبة اختبار الوحدات لقواعد الإصدار 9 دائمًا المحاكيات ولا تتفاعل أبدًا مع موارد الإنتاج.

يمكنك استيراد المكتبة باستخدام عبارات الاستيراد النموذجية في الإصدار 9. على سبيل المثال:

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

الطرق الشائعة والدوال المساعدة

يمكنك أيضًا الاطّلاع على طُرق الاختبار الخاصة بالمحاكي باستخدام واجهة برمجة التطبيقات النموذجية.

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()

نفِّذ دالة إعداد اختبار مع سياق يتصرف كما لو كانت &quot;قواعد الأمان&quot; غير مفعّلة.

تتلقّى هذه الطريقة دالة ردّ اتصال، تتلقّى بدورها سياق تجاوز قواعد الأمان وتعرض وعدًا. سيتم إيقاف السياق بعد أن يتم تنفيذ الوعد أو رفضه.

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'), { ... });

طُرق خاصة بالمحاكي

يمكنك أيضًا الاطّلاع على طُرق الاختبار الشائعة ووظائف الأداة المساعدة باستخدام واجهة برمجة التطبيقات النموذجية.

Cloud Firestore

Cloud Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

تؤدي هذه الطريقة إلى محو البيانات في قاعدة بيانات Firestore التي تنتمي إلى projectId الذي تم إعداده لمحاكي Firestore.

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

تحصل هذه الطريقة على مثيل Firestore لسياق الاختبار هذا. يمكن استخدام مثيل حزمة تطوير البرامج (SDK) لعميل JavaScript من Firebase الذي تم عرضه مع واجهات برمجة التطبيقات الخاصة بحزمة تطوير البرامج (SDK) للعميل (الإصدار 9 المعياري أو الإصدار 9 المتوافق).

Realtime Database

Realtime Database

RulesTestEnvironment.clearDatabase() => Promise<void>

تؤدي هذه الطريقة إلى محو البيانات في Realtime Database التي تخص projectId الذي تم إعداده لمحاكي Realtime Database.

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

احصل على مثيل Realtime Database لسياق الاختبار هذا. يمكن استخدام مثيل حزمة تطوير البرامج (SDK) الخاصة ببرنامج Firebase JS الذي تم عرضه مع واجهات برمجة التطبيقات الخاصة بحزمة تطوير البرامج (SDK) الخاصة بالعميل (النموذجية أو ذات مساحة الاسم، الإصدار 9 أو إصدار أحدث). تقبل الطريقة عنوان URL لمثيل Realtime Database. في حال تحديدها، تعرض هذه السمة مثيلاً لنسخة محاكية من مساحة الاسم مع استخراج المَعلمات من عنوان URL.

Cloud Storage

Cloud Storage

RulesTestEnvironment.clearStorage() => Promise<void>

تؤدي هذه الطريقة إلى محو العناصر والبيانات الوصفية في حِزم التخزين التابعة لـ projectId التي تم إعدادها لمحاكي Cloud Storage.

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

تعرض هذه الطريقة مثيلاً من Storage تم إعداده للاتصال بالمحاكي. تقبل الطريقة عنوان URL gs:// لمجموعة بيانات التخزين في Firebase من أجل الاختبار. في حال تحديدها، تعرض هذه السمة مثيلاً من Storage لإصدار محاكى من اسم الحزمة.

إجراء اختبارات الوحدات المحلية باستخدام حزمة تطوير البرامج (SDK) المستندة إلى JavaScript الإصدار 8

اختَر منتجًا للاطّلاع على الطرق التي تستخدمها حزمة تطوير البرامج (SDK) الخاصة بالاختبار في Firebase للتفاعل مع المحاكي.

Cloud Firestore

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

تعرض هذه الطريقة تطبيق Firebase تم إعداده بما يتوافق مع رقم تعريف المشروع ومتغيّر المصادقة المحدّدين في الخيارات. استخدِم هذه الطريقة لإنشاء تطبيق تمت مصادقته كمستخدم محدّد لاستخدامه في الاختبارات.

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

تعرض هذه الطريقة وعدًا يتم رفضه في حال نجاح الإدخال أو يتم قبوله في حال رفض الإدخال. يُستخدَم هذا الخيار للتأكّد مما إذا كانت عملية قراءة أو كتابة في قاعدة البيانات قد تعذّرت.

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

assertSucceeds(pr: 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

استخدِم هذا الخيار لإنشاء تطبيق تم إثبات هويته كمستخدم محدّد لاستخدامه في الاختبارات.

تعرض هذه الدالة تطبيق Firebase تم إعداده بما يتوافق مع اسم قاعدة البيانات وتجاوز متغير المصادقة المحدّد في الخيارات.

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

استخدِم هذا الإجراء لإنشاء تطبيق مصادَق عليه كمشرف لإعداد حالة الاختبارات.

تعرض هذه الدالة تطبيقًا مُهيّأً على Firebase للمشرف يتوافق مع اسم قاعدة البيانات المحدّد في الخيارات. يتجاوز هذا التطبيق قواعد الأمان عند القراءة والكتابة في قاعدة البيانات.

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]

تعرِض هذه الطريقة جميع تطبيقات الاختبار والإدارة التي تم إعدادها حاليًا.

استخدِم هذا الخيار لتنظيف التطبيقات بين الاختبارات أو بعدها (يُرجى العِلم أنّ التطبيقات التي تم إعدادها باستخدام أدوات معالجة نشطة تمنع JavaScript من الخروج):

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

assertFails(pr: Promise) => Promise

تعرض هذه الطريقة وعدًا يتم رفضه في حال نجاح الإدخال، ويتم قبوله في حال رفض الإدخال.

استخدِم هذا الرمز للتأكّد من تعذُّر قراءة البيانات من قاعدة البيانات أو كتابتها فيها:

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

assertSucceeds(pr: Promise) => Promise

تعرض هذه الطريقة وعدًا ينجح إذا نجح الإدخال، ويتم رفضه إذا تم رفض الإدخال.

استخدِم هذا الرمز للتأكّد من نجاح عملية قراءة أو كتابة في قاعدة البيانات:

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

Cloud Storage

Cloud Storage

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

استخدِم هذا الخيار لإنشاء تطبيق تم إثبات هويته كمستخدم محدّد لاستخدامه في الاختبارات.

تعرِض هذه الدالة تطبيق Firebase تمّت تهيئته ويتوافق مع اسم حزمة التخزين وتجاوز متغيّر المصادقة المحدّد في الخيارات.

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

استخدِم هذا الإجراء لإنشاء تطبيق مصادَق عليه كمشرف لإعداد حالة الاختبارات.

تعرض هذه الدالة تطبيق Firebase للمشرف الذي تمّت تهيئته والذي يتوافق مع اسم حزمة التخزين المحدّد في الخيارات. يتجاوز هذا التطبيق قواعد الأمان عند القراءة والكتابة في الحزمة.

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]

تعرِض هذه الطريقة جميع تطبيقات الاختبار والإدارة التي تم إعدادها حاليًا.

استخدِم هذا الخيار لتنظيف التطبيقات بين الاختبارات أو بعدها (يُرجى العِلم أنّ التطبيقات التي تم إعدادها باستخدام أدوات معالجة نشطة تمنع JavaScript من الخروج):

 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

تعرض هذه الدالة وعدًا ينجح إذا نجح الإدخال، ويتم رفضه إذا تم رفض الإدخال.

استخدِم هذا الرمز للتأكّد من نجاح عملية قراءة أو كتابة في حزمة تخزين:

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

واجهة برمجة تطبيقات مكتبة RUT للإصدار 8 من حزمة تطوير البرامج (SDK) المستندة إلى JavaScript

اختَر منتجًا للاطّلاع على الطرق التي تستخدمها حزمة تطوير البرامج (SDK) الخاصة بالاختبار في Firebase للتفاعل مع المحاكي.

Cloud Firestore

Cloud Firestore

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

تعرض هذه الطريقة تطبيق Firebase تم إعداده بما يتوافق مع رقم تعريف المشروع ومتغيّر المصادقة المحدّدين في الخيارات. استخدِم هذه الطريقة لإنشاء تطبيق تمت مصادقته كمستخدم محدّد لاستخدامه في الاختبارات.

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

تعرض هذه الطريقة وعدًا يتم رفضه في حال نجاح الإدخال أو يتم قبوله في حال رفض الإدخال. يُستخدَم هذا الخيار للتأكّد مما إذا كانت عملية قراءة أو كتابة في قاعدة البيانات قد تعذّرت.

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

assertSucceeds(pr: 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

استخدِم هذا الخيار لإنشاء تطبيق تم إثبات هويته كمستخدم محدّد لاستخدامه في الاختبارات.

تعرض هذه الدالة تطبيق Firebase تم إعداده بما يتوافق مع اسم قاعدة البيانات وتجاوز متغير المصادقة المحدّد في الخيارات.

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

initializeAdminApp({ databaseName: string }) => FirebaseApp

استخدِم هذا الإجراء لإنشاء تطبيق مصادَق عليه كمشرف لإعداد حالة الاختبارات.

تعرض هذه الدالة تطبيقًا مُهيّأً على Firebase للمشرف يتوافق مع اسم قاعدة البيانات المحدّد في الخيارات. يتجاوز هذا التطبيق قواعد الأمان عند القراءة والكتابة في قاعدة البيانات.

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]

تعرِض هذه الطريقة جميع تطبيقات الاختبار والإدارة التي تم إعدادها حاليًا.

استخدِم هذا الخيار لتنظيف التطبيقات بين الاختبارات أو بعدها (يُرجى العِلم أنّ التطبيقات التي تم إعدادها باستخدام أدوات معالجة نشطة تمنع JavaScript من الخروج):

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

assertFails(pr: Promise) => Promise

تعرض هذه الطريقة وعدًا يتم رفضه في حال نجاح الإدخال، ويتم قبوله في حال رفض الإدخال.

استخدِم هذا الرمز للتأكّد من تعذُّر قراءة البيانات من قاعدة البيانات أو كتابتها فيها:

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

assertSucceeds(pr: Promise) => Promise

تعرض هذه الطريقة وعدًا ينجح إذا نجح الإدخال، ويتم رفضه إذا تم رفض الإدخال.

استخدِم هذا الرمز للتأكّد من نجاح عملية قراءة أو كتابة في قاعدة البيانات:

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

Cloud Storage

Cloud Storage

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

استخدِم هذا الخيار لإنشاء تطبيق تم إثبات هويته كمستخدم محدّد لاستخدامه في الاختبارات.

تعرِض هذه الدالة تطبيق Firebase تمّت تهيئته ويتوافق مع اسم حزمة التخزين وتجاوز متغيّر المصادقة المحدّد في الخيارات.

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

initializeAdminApp({ storageBucket: string }) => FirebaseApp

استخدِم هذا الإجراء لإنشاء تطبيق مصادَق عليه كمشرف لإعداد حالة الاختبارات.

تعرض هذه الدالة تطبيق Firebase للمشرف الذي تمّت تهيئته والذي يتوافق مع اسم حزمة التخزين المحدّد في الخيارات. يتجاوز هذا التطبيق قواعد الأمان عند القراءة والكتابة في الحزمة.

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]

تعرِض هذه الطريقة جميع تطبيقات الاختبار والإدارة التي تم إعدادها حاليًا.

استخدِم هذا الخيار لتنظيف التطبيقات بين الاختبارات أو بعدها (يُرجى العِلم أنّ التطبيقات التي تم إعدادها باستخدام أدوات معالجة نشطة تمنع JavaScript من الخروج):

 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

تعرض هذه الدالة وعدًا ينجح إذا نجح الإدخال، ويتم رفضه إذا تم رفض الإدخال.

استخدِم هذا الرمز للتأكّد من نجاح عملية قراءة أو كتابة في حزمة تخزين:

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