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

تسهِّل 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 في قواعد الأمان، ما يسهّل اختبارات الوحدة كثيرًا. بالإضافة إلى ذلك، توفّر المكتبة بعض الميزات الخاصة بالمحاكي، مثل محو جميع البيانات، كما هو موضّح أدناه.
  • ستوافق المحاكيات أيضًا على الرموز المميّزة لإصدار الإصدار العلني من 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 مكتبة اختبار وحدات قواعد الأمان مع كلّ من الإصدار 9 من حزمة تطوير البرامج (SDK) لـ JavaScript والإصدار 8 من حزمة SDK. تختلف واجهات برمجة تطبيقات المكتبة بشكل كبير. ننصح باستخدام مكتبة الاختبار باستخدام الإصدار v9، فهي أكثر بساطة وتتطلب إعدادًا أقل للاتصال بأجهزة المحاكاة وبالتالي تجنُّب الاستخدام غير المقصود لموارد الإنتاج. للتوافق مع الإصدارات القديمة، نواصل إتاحة مكتبة اختبار الإصدار 8.

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

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

تدرك مكتبة اختبار الوحدات v9 (القواعد) v9 دائمًا الأدوات المحاكية ولا تمس موارد الإنتاج أبدًا.

يمكنك استيراد المكتبة باستخدام عبارات الاستيراد النموذجية للإصدار 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.

بعد الاستيراد، يتضمّن تنفيذ اختبارات الوحدة ما يلي:

  • إنشاء RulesTestEnvironment وضبطه من خلال مكالمة إلى initializeTestEnvironment
  • إعداد بيانات اختبارية بدون تنشيط Rules، باستخدام RulesTestEnvironment.withSecurityRulesDisabledطريقة سهلة تسمح لك بتجاوزها مؤقتًا، 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 تمت مصادقته. سيتم إرفاق رمز مميّز mock 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(), '/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()

يمكنك تشغيل دالة إعداد اختبار باستخدام سياق يعمل كما لو كانت قواعد الأمان متوقفة.

تأخذ هذه الطريقة دالة ردّ اتصال تستخدِم سياق Security-Rules-bypassing وتُعرِض وعدًا. وسيتم إتلاف السياق بمجرد حل الوعد / رفضه.

RulesTestEnvironment.cleanup()

تؤدي هذه الطريقة إلى تدمير جميع RulesTestContexts التي تم إنشاؤها في البيئة الاختبارية ومحو الموارد الأساسية، ما يتيح الخروج بنجاح.

لا تؤدي هذه الطريقة إلى تغيير حالة المحاكيات بأي شكل من الأشكال. لإعادة ضبط البيانات بين الاختبارات، استخدِم طريقة محو البيانات الخاصة بمحاكي التطبيق.

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

هذه وظيفة أداة لحالة الاختبار.

تؤكد الدالة أنّه سيتم حلّ الوعد المقدَّم الذي يغلِّف عملية المحاكي بدون أي انتهاكات لقواعد الأمان.

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 JS الذي تم عرضه مع واجهات برمجة تطبيقات حزمة تطوير البرامج (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 Client المعروض مع واجهات برمجة تطبيقات حزمة تطوير البرامج (SDK) للعملاء (الإصدار 9 أو الإصدارات الأحدث، سواء كانت وحدات أو محدّدة النطاق). تقبل الطريقة عنوان URL لمثيل "قاعدة بيانات الوقت الفعلي". في حال تحديدها، تعرض مثيلًا لإصدار محاكي من مساحة الاسم مع المَعلمات المستخرَجة من عنوان URL.

Cloud Storage

Cloud Storage

RulesTestEnvironment.clearStorage() => Promise<void>

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

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

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

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

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

Cloud Firestore

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

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

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" و "rules" كسلسلتَين.

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 لحزمة JS SDK الإصدار 8

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

Cloud Firestore

Cloud Firestore

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

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

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" و "rules" كسلسلتَين.

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