تسهِّل 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. تختلف واجهات برمجة التطبيقات الخاصة بالمكتبة اختلافًا كبيرًا. ننصحك باستخدام مكتبة الاختبار في الإصدار 9، وهي أكثر سلاسة وتطلب إعدادًا أقل للاتصال بالمحاكيات، وبالتالي تجنُّب استخدام موارد الإنتاج بدون قصد. للتوافق مع الإصدارات القديمة، نواصل إتاحة مكتبة اختبار الإصدار 8.
- طرق الاختبار الشائعة ودوالّ المرافق في حزمة تطوير البرامج (SDK) من الإصدار 9
- طرق الاختبار الخاصة بالمحاكي في حزمة SDK الإصدار 9
استخدِم وحدة @firebase/rules-unit-testing
للتفاعل مع المحاكي
الذي يتم تشغيله على الجهاز. إذا ظهرت لك أخطاء متعلّقة بانتهاء مهلة أو ECONNREFUSED
، تحقّق جيدًا مما إذا كان المحاكي قيد التشغيل.
ننصحك بشدة باستخدام إصدار حديث من Node.js حتى تتمكّن من استخدام رمز
async/await
. يتضمن كل السلوك الذي قد تريد اختباره
تقريبًا دوالًا غير متزامنة، وتم تصميم وحدة الاختبار للعمل مع код برمجي يستند إلى
الوعد.
تكون مكتبة اختبار وحدات القواعد في الإصدار 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.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>
هذه وظيفة أداة لحالة الاختبار.
تؤكد الدالة أنّ الوعد المقدَّم الذي يغلِّف عملية المحاكي سيتم رفضه بسبب انتهاك قواعد الأمان.
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) لبرنامج Firebase JS العميل المعروض مع واجهات برمجة تطبيقات حزمة تطوير البرامج (SDK) للبرنامج (الإصدار 9 من حزمة تطوير البرامج (SDK) المتوافقة مع الوحدات أو الإصدار 9 من حزمة تطوير البرامج (SDK) المتوافقة مع الإصدارات السابقة).
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 تم إعداده وفقًا لاسم قاعدة البيانات وتجاوز متغيّر auth المحدد في الخيارات
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 تم إعداده وفقًا لاسم قاعدة البيانات وتجاوز متغيّر auth المحدد في الخيارات
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());