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

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

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

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

تدرك مكتبة اختبار وحدة القواعد v9 دائمًا أدوات المحاكاة ولا يؤثر على موارد الإنتاج لديك.

يمكنك استيراد المكتبة باستخدام عبارات الاستيراد المُركّبة في الإصدار 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.withSecurityRulesDisabled
  • جارٍ إعداد مجموعة الاختبار ولكل اختبار قبل/بعد عناصر المحاذاة مع طلبات استدعاء تنظيف بيانات الاختبار والبيئة، مثل RulesTestEnvironment.cleanup() أو RulesTestEnvironment.clearFirestore().
  • تنفيذ حالات الاختبار التي تحاكي حالات المصادقة باستخدام RulesTestEnvironment.authenticatedContext و RulesTestEnvironment.unauthenticatedContext

الطرق الشائعة ووظائف المنفعة

راجع أيضًا طرق اختبار خاصة بالمحاكي باستخدام واجهة برمجة التطبيقات modular 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) الطلبات التي يتم إنشاؤها من خلال السياق المعروض ستتضمّن نموذجًا تجريبيًا تم إرفاق رمز مميّز واحد (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()

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

تأخذ هذه الطريقة دالة استدعاء، والتي تأخذ مسار تجاوز قواعد الأمان والسياق ويقدم الوعد. سيتم تلف السياق بعد تقديم الوعد يحل / يرفض.

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

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

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

Cloud Firestore

Cloud Firestore

RulesTestEnvironment.clearFirestore() => Promise<void>

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

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

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

Realtime Database

Realtime Database

RulesTestEnvironment.clearDatabase() => Promise<void>

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

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

احصل على مثيل Realtime Database لهذا السياق التجريبي. ملف JavaScript JS الذي تم إرجاعه من Firebase يمكن استخدام مثيل حزمة تطوير البرامج (SDK) للعميل مع واجهات برمجة تطبيقات حزمة تطوير البرامج (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 لنسخة تمت محاكاتها لاسم الحزمة.

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

يمكنك اختيار منتج للاطّلاع على الطرق التي تستخدمها حزمة تطوير البرامج (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" و"القواعد" الخاصة بك كسلاسل.

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

يمكنك اختيار منتج للاطّلاع على الطرق التي تستخدمها حزمة تطوير البرامج (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" و"القواعد" الخاصة بك كسلاسل.

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