Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

قم بتوصيل تطبيقك بـ Cloud Firestore Emulator

قبل ربط التطبيق إلى محاكي سحابة Firestore، تأكد من أنك تفهم العام المحاكي جناح Firebase المحلية سير العمل ، وأنك تركيب وتكوين والمحاكي جناح المحلية وإعادة النظر في أوامر CLI .

اختر مشروع Firebase

يحاكي Firebase Local Emulator Suite المنتجات لمشروع Firebase واحد.

لتحديد المشروع إلى استخدام، قبل البدء في محاكاة، في CLI المدى firebase use في دليل العمل الخاص بك. أو، يمكنك تمرير --project العلم إلى كل أمر المضاهاة.

المحاكي جناح محلي يدعم مضاهاة المشاريع Firebase حقيقية وعرض المشاريع.

نوع المشروع سمات استخدم مع المحاكيات
حقيقة

مشروع Firebase الحقيقي هو المشروع الذي أنشأته وتهيئته (على الأرجح عبر وحدة تحكم Firebase).

تحتوي المشاريع الحقيقية على موارد مباشرة ، مثل طبعات قواعد البيانات أو حاويات التخزين أو الوظائف أو أي مورد آخر تقوم بإعداده لمشروع Firebase هذا.

عند العمل مع مشاريع Firebase الحقيقية ، يمكنك تشغيل برامج محاكاة لأي من المنتجات المدعومة أو جميعها.

للحصول على أي من المنتجات التي لا يتم محاكاة، والتطبيقات الخاصة بك ورمز التفاعل مع الموارد الحية (مثيل قاعدة البيانات، ودلو التخزين، وظيفة، وما إلى ذلك).

تجريبي

مشروع تجريبي Firebase لا يوجد لديه التكوين Firebase الحقيقي وأية موارد الحية. يتم الوصول إلى هذه المشاريع عادةً عبر مختبرات الرموز أو البرامج التعليمية الأخرى.

معرفات مشروع تجريبي المشاريع لديها demo- البادئة.

عند العمل مع عرض مشاريع Firebase، تطبيقاتك وتتفاعل مع كود محاكاة فقط. إذا حاول تطبيقك التفاعل مع مورد لا يعمل المحاكي من أجله ، فسيفشل هذا الرمز.

نوصيك باستخدام المشاريع التجريبية حيثما أمكن ذلك. الفوائد تشمل:

  • إعداد أسهل ، حيث يمكنك تشغيل المحاكيات دون إنشاء مشروع Firebase
  • أمان أقوى ، نظرًا لأنه إذا كانت التعليمات البرمجية الخاصة بك تستدعي عن طريق الخطأ موارد (إنتاج) غير محاكية ، فلا توجد فرصة لتغيير البيانات والاستخدام والفوترة
  • دعم أفضل في وضع عدم الاتصال ، حيث لا توجد حاجة للوصول إلى الإنترنت لتنزيل تكوين SDK الخاص بك.

صك تطبيقك للتحدث مع المحاكيات

تطبيقات Android و iOS و Web SDK

قم بإعداد التكوين داخل التطبيق أو فصول الاختبار للتفاعل مع Cloud Firestore على النحو التالي.

ذكري المظهر
        // 10.0.2.2 is the special IP address to connect to the 'localhost' of
        // the host computer from an Android emulator.
        FirebaseFirestore firestore = FirebaseFirestore.getInstance();
        firestore.useEmulator("10.0.2.2", 8080);

        FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setPersistenceEnabled(false)
                .build();
        firestore.setFirestoreSettings(settings);
iOS - سويفت
let settings = Firestore.firestore().settings
settings.host = "localhost:8080"
settings.isPersistenceEnabled = false 
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

إصدار الويب 9

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, 'localhost', 8080);

إصدار الويب 8

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}
الويب
// Initialize your Web app as described in the Get started for Web
// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("localhost", 8080);
}

ليس هناك حاجة إلى إعداد إضافية لاختبار وظائف السحب الناجمة عن الأحداث Firestore باستخدام المحاكي. عندما يكون كل من محاكيات Firestore و Cloud Functions قيد التشغيل ، فإنهما يعملان معًا تلقائيًا.

SDKs للمشرف

المشرف تطوير البرامج Firebase الاتصال تلقائيا إلى محاكي سحابة Firestore عندما FIRESTORE_EMULATOR_HOST تم تعيين متغير البيئة:

export FIRESTORE_EMULATOR_HOST="localhost:8080"

إذا تم تشغيل التعليمات البرمجية داخل ظائف الغيمة منافس ID مشروعك وتكوين أخرى سيتم تعيين تلقائيا عند الاتصال initalizeApp .

عند الاتصال بمحاكي Cloud Firestore من أي بيئة أخرى ، ستحتاج إلى تحديد معرّف المشروع. يمكنك تمرير ID مشروع ل initializeApp مباشرة أو تعيين GCLOUD_PROJECT متغير البيئة. لاحظ أنك لست بحاجة إلى استخدام معرف مشروع Firebase الحقيقي ؛ والمضاهاة سحابة Firestore قبول أي معرف المشروع، طالما أن لديها شكل صحيح .

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
متغيرات البيئة
export GCLOUD_PROJECT="your-project-id"

امسح قاعدة البيانات الخاصة بك بين الاختبارات

لا يوفر Production Firestore طريقة SDK للنظام الأساسي لمسح قاعدة البيانات ، لكن محاكي Firestore يمنحك نقطة نهاية REST خصيصًا لهذا الغرض ، والتي يمكن استدعاؤها من إعداد إطار اختبار / خطوة tearDown ، من فئة اختبار ، أو من shell (على سبيل المثال ، مع curl ) قبل أن يتم ركل اختبار خارج. يمكنك استخدام هذا الأسلوب كبديل لإغلاق عملية المحاكي ببساطة.

في الطريقة المناسبة، تنفيذ عملية DELETE HTTP، وتوفير الخاصة بك Firebase projectID، على سبيل المثال firestore-emulator-example ، إلى نقطة النهاية التالية:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

بطبيعة الحال ، يجب أن تنتظر التعليمات البرمجية الخاصة بك تأكيد REST بأن التدفق انتهى أو فشل.

يمكنك إجراء هذه العملية من الغلاف:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

بعد تنفيذ خطوة كهذه ، يمكنك إجراء تسلسل لاختباراتك وتشغيل وظائفك بثقة أنه سيتم حذف البيانات القديمة بين عمليات التشغيل وأنك تستخدم تكوين اختبار أساسي جديد.

استيراد وتصدير البيانات

تسمح لك محاكيات قاعدة البيانات والتخزين السحابي بتصدير البيانات من مثيل محاكي قيد التشغيل. حدد مجموعة أساسية من البيانات لاستخدامها في اختبارات الوحدة الخاصة بك أو مهام سير عمل التكامل المستمر ، ثم قم بتصديرها لمشاركتها بين الفريق.

firebase emulators:export ./dir

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

firebase emulators:start --import=./dir

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

firebase emulators:start --import=./dir --export-on-exit

تعمل هذه الخيارات استيراد وتصدير البيانات مع firebase emulators:exec قيادة أيضا. لمزيد من المعلومات، يرجى الرجوع إلى المرجع قيادة منافس .

تصور نشاط قواعد الأمان

أثناء عملك من خلال النموذج الأولي وحلقات الاختبار ، يمكنك استخدام أدوات التصور والتقارير المقدمة من Local Emulator Suite.

استخدم مراقب الطلبات

يتيح لك محاكي Cloud Firestore تصور طلبات العميل في واجهة مستخدم Emulator Suite ، بما في ذلك تتبع التقييم لقواعد أمان Firebase.

فتح Firestore> علامة التبويب طلبات لعرض تسلسل تقييم مفصل لكل طلب.

Firestore طلبات المحاكي مراقب يعرض تقييمات قواعد الأمان

تصور تقارير تقييمات القواعد

عند إضافة قواعد الأمان إلى النموذج الأولي الخاص بك ، يمكنك تصحيحها باستخدام أدوات تصحيح الأخطاء Local Emulator Suite.

بعد إجراء مجموعة من الاختبارات ، يمكنك الوصول إلى تقارير التغطية الاختبارية التي توضح كيفية تقييم كل قاعدة من قواعد الأمان الخاصة بك.

للحصول على التقارير ، استعلم عن نقطة نهاية مكشوفة على المحاكي أثناء تشغيله. للحصول على إصدار متوافق مع المتصفح ، استخدم عنوان URL التالي:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

يؤدي هذا إلى تقسيم القواعد إلى تعبيرات وتعبيرات فرعية يمكنك تمرير الماوس فوقها للحصول على مزيد من المعلومات ، بما في ذلك عدد التقييمات والقيم التي تم إرجاعها. للحصول على نسخة JSON الأولية من هذه البيانات ، قم بتضمين عنوان URL التالي في استعلامك:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

هنا ، يبرز إصدار HTML من التقرير التقييمات التي تتسبب في حدوث أخطاء غير محددة وقيمة خالية:

كيف يختلف محاكي Cloud Firestore عن الإنتاج

يحاول Cloud Firestore Emulator تكرار سلوك خدمة الإنتاج بأمانة مع بعض القيود الملحوظة.

المعاملات

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

فهارس

لا يتتبع المحاكي الفهارس المركبة وبدلاً من ذلك سينفذ أي استعلام صالح. تأكد من اختبار تطبيقك مقابل مثيل Cloud Firestore حقيقي لتحديد الفهارس التي ستحتاج إليها.

حدود

لا يفرض المحاكي جميع القيود المفروضة في الإنتاج. على سبيل المثال ، قد يسمح المحاكي بالمعاملات التي سيتم رفضها باعتبارها كبيرة جدًا من قبل خدمة الإنتاج. تأكد من أنك على دراية حدود الموثقة والتي تقوم بتصميم التطبيق لتفاديها بشكل استباقي.

ماذا بعد؟