بناء اختبارات الوحدة

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

إذا لم تكن قد قمت بذلك بالفعل، فقم بإعداد Firebase Emulators .

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

قبل البدء في استخدام المحاكي، ضع في اعتبارك ما يلي:

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

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

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

التفاعل مع محاكي قاعدة البيانات في الوقت الحقيقي

يمكن الوصول إلى مثيل قاعدة بيانات Firebase Realtime للإنتاج من خلال نطاق فرعي لـ 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>

قم بإجراء اختبارات الوحدة المحلية باستخدام الإصدار 9 JavaScript SDK

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

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

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

مكتبة v9 Rules Unit Testing تكون دائمًا على دراية بالمحاكيات ولا تمس موارد الإنتاج الخاصة بك أبدًا.

يمكنك استيراد المكتبة باستخدام بيانات الاستيراد المعيارية 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 .
  • إعداد بيانات الاختبار دون تشغيل القواعد، باستخدام طريقة ملائمة تسمح لك بتجاوزها مؤقتًا، 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 ، الذي يتصرف مثل مستخدم المصادقة المصادق عليه. ستحتوي الطلبات التي تم إنشاؤها عبر السياق الذي تم إرجاعه على رمز مصادقة وهمي مرفق. اختياريًا، قم بتمرير كائن يحدد المطالبات المخصصة أو التجاوزات لحمولات رمز المصادقة المميز.

استخدم كائن سياق الاختبار الذي تم إرجاعه في اختباراتك للوصول إلى أي مثيلات محاكي تم تكوينها، بما في ذلك تلك التي تم تكوينها باستخدام 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 ، الذي يتصرف مثل العميل الذي لم يتم تسجيل دخوله عبر المصادقة. لن تحتوي الطلبات التي تم إنشاؤها عبر السياق الذي تم إرجاعه على رموز 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'), { ... });

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

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

سحابة فايرستور

سحابة فايرستور

RulesTestEnvironment.clearFirestore() => Promise<void>

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

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

تحصل هذه الطريقة على مثيل Firestore لسياق الاختبار هذا. يمكن استخدام مثيل Firebase JS Client SDK الذي تم إرجاعه مع واجهات برمجة تطبيقات SDK للعميل (v9 modular أو v9 compat).

قاعدة بيانات الوقت الحقيقي

قاعدة بيانات الوقت الحقيقي

RulesTestEnvironment.clearDatabase() => Promise<void>

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

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

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

سحابة التخزين

سحابة التخزين

RulesTestEnvironment.clearStorage() => Promise<void>

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

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

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

قم بإجراء اختبارات الوحدة المحلية باستخدام v8 JavaScript SDK

حدد منتجًا لرؤية الأساليب المستخدمة بواسطة Firebase Test SDK للتفاعل مع المحاكي.

سحابة فايرستور

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"
});
   

قاعدة بيانات الوقت الحقيقي

قاعدة بيانات الوقت الحقيقي

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

استخدم هذا لتعيين قواعد قاعدة البيانات الخاصة بك.

يرسل القواعد إلى قاعدة بيانات قيد التشغيل محليًا. يأخذ كائن خيارات يحدد "اسم قاعدة البيانات" و"القواعد" الخاصة بك كسلاسل.

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

سحابة التخزين

سحابة التخزين

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 لـ JS SDK v8

حدد منتجًا لرؤية الأساليب المستخدمة بواسطة Firebase Test SDK للتفاعل مع المحاكي.

سحابة فايرستور

سحابة فايرستور

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"
});
   

قاعدة بيانات الوقت الحقيقي

قاعدة بيانات الوقت الحقيقي

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

استخدم هذا لتعيين قواعد قاعدة البيانات الخاصة بك.

يرسل القواعد إلى قاعدة بيانات قيد التشغيل محليًا. يأخذ كائن خيارات يحدد "اسم قاعدة البيانات" و"القواعد" الخاصة بك كسلاسل.

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

سحابة التخزين

سحابة التخزين

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