تسهِّل 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.
- طرق الاختبار الشائعة ودوالّ المرافق في حزمة تطوير البرامج (SDK) من الإصدار 9
- طرق الاختبار الخاصة بالمحاكي في حزمة SDK من الإصدار 9
استخدِم وحدة @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());