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

بالنسبة لهذا الموضوع ، لتقديم سير عمل Local Emulator Suite ، دعنا نفترض أنك تعمل على تطبيق يستخدم مجموعة نموذجية من المنتجات: قاعدة بيانات Firebase ووظائف السحابة التي يتم تشغيلها بواسطة العمليات على قاعدة البيانات هذه.
بعد أن تقوم بتهيئة مشروع Firebase محليًا ، ستشتمل دورة التطوير باستخدام Local Emulator Suite عادةً على ثلاث خطوات:
يتميز النموذج الأولي بشكل تفاعلي مع المحاكيات وواجهة مستخدم Emulator Suite.
إذا كنت تستخدم محاكي قاعدة بيانات أو محاكي Cloud Functions ، فقم بتنفيذ خطوة لمرة واحدة لتوصيل تطبيقك بالمحاكيات.
قم بأتمتة اختباراتك باستخدام المحاكيات والبرامج النصية المخصصة.
تهيئة مشروع Firebase محليًا
تأكد من تثبيت CLI أو التحديث إلى أحدث إصدار له .
curl -sL firebase.tools | bash
إذا لم تكن قد قمت بذلك بالفعل ، فقم بتهيئة دليل العمل الحالي كمشروع Firebase ، باتباع المطالبات التي تظهر على الشاشة لتحديد أنك تستخدم وظائف السحابة وإما Cloud Firestore أو Realtime Database :
firebase init
سيحتوي دليل مشروعك الآن على ملفات تكوين Firebase ، وملف تعريف قواعد أمان Firebase لقاعدة البيانات ، ودليل functions
يحتوي على رمز وظائف السحابة ، وملفات دعم أخرى.
النموذج الأولي بشكل تفاعلي
تم تصميم Local Emulator Suite للسماح لك بوضع نماذج أولية لميزات جديدة بسرعة ، وتعد واجهة المستخدم المدمجة في Suite واحدة من أكثر أدوات النماذج الأولية فائدة. إنه يشبه إلى حد ما تشغيل وحدة تحكم Firebase محليًا.
باستخدام Emulator Suite UI ، يمكنك تكرار تصميم قاعدة بيانات ، وتجربة تدفقات بيانات مختلفة تتضمن وظائف سحابية ، وتقييم تغييرات قواعد الأمان ، والتحقق من السجلات لتأكيد أداء خدماتك الخلفية ، والمزيد. بعد ذلك ، إذا كنت تريد البدء من جديد ، فما عليك سوى مسح قاعدة البيانات الخاصة بك والبدء من جديد بفكرة تصميم جديدة.
كل ذلك متاح عند بدء Local Emulator Suite بـ:
firebase emulators:start
لإنشاء نموذج أولي لتطبيقنا الافتراضي ، فلنقم بإعداد واختبار وظيفة سحابية أساسية لتعديل إدخالات النص في قاعدة بيانات ، وإنشاء قاعدة البيانات هذه ونشرها في واجهة مستخدم Emulator Suite لتشغيلها.
- قم بإنشاء وظيفة سحابية يتم تشغيلها بواسطة عمليات الكتابة في قاعدة البيانات عن طريق تحرير ملف
functions/index.js
في دليل المشروع الخاص بك. استبدل محتويات الملف الموجود بالمقتطف التالي. تستمع هذه الوظيفة إلى التغييرات التي تم إجراؤها على المستندات في مجموعةmessages
، وتحول محتويات الحقلoriginal
للمستند إلى أحرف كبيرة ، وتخزن النتيجة في الحقلuppercase
لهذا المستند. - قم بتشغيل Local Emulator Suite باستخدام
firebase emulators:start
. تبدأ وظائف السحابة ومحاكيات قواعد البيانات ، ويتم تكوينها تلقائيًا للعمل البيني. - اعرض واجهة المستخدم في المستعرض الخاص بك على
http://localhost:4000
. المنفذ 4000 هو الإعداد الافتراضي لواجهة المستخدم ، ولكن تحقق من إخراج الرسائل الطرفية بواسطة Firebase CLI. لاحظ حالة المحاكيات المتاحة. في حالتنا ، سيتم تشغيل وظائف السحابة ومحاكيات Cloud Firestore.
- في واجهة المستخدم ، في Firestore> علامة التبويب البيانات ، انقر فوق بدء التجميع واتبع المطالبات لإنشاء مستند جديد في مجموعة
messages
، باستخدام اسم الحقلoriginal
test
القيمة. يؤدي هذا إلى تشغيل وظيفة السحابة لدينا. لاحظ ظهور حقلuppercase
جديد قريبًا ، ممتلئًا بالسلسلة "TEST".
- في علامة التبويب Firestore> الطلبات ، افحص الطلبات المقدمة إلى قاعدة البيانات التي تمت مضاهاتها ، بما في ذلك جميع تقييمات قواعد أمان Firebase التي يتم إجراؤها كجزء من تلبية هذه الطلبات.
- تحقق من علامة التبويب السجلات للتأكد من أن وظيفتك لم تتعرض لأخطاء لأنها قامت بتحديث قاعدة البيانات.
const functions = require('firebase-functions'); exports.makeUppercase = functions.firestore.document('/messages/{documentId}') .onCreate((snap, context) => { const original = snap.data().original; console.log('Uppercasing', context.params.documentId, original); const uppercase = original.toUpperCase(); return snap.ref.set({uppercase}, {merge: true}); });
يمكنك التكرار بسهولة بين رمز الوظيفة السحابية وتعديلات قاعدة البيانات التفاعلية حتى تحصل على تدفق البيانات الذي تبحث عنه ، دون لمس رمز الوصول إلى قاعدة البيانات داخل التطبيق ، وإعادة تجميع مجموعات الاختبار وإعادة تشغيلها.
قم بتوصيل تطبيقك بالمحاكيات
عندما تحرز تقدمًا جيدًا في النماذج الأولية التفاعلية وتستقر على التصميم ، ستكون جاهزًا لإضافة رمز الوصول إلى قاعدة البيانات إلى تطبيقك باستخدام SDK المناسب. ستستمر في استخدام علامة تبويب قاعدة البيانات ، وللوظائف ، علامة تبويب السجلات في Emulator Suite UI للتأكد من صحة سلوك التطبيق.
تذكر أن Local Emulator Suite هي أداة تطوير محلية. لن تؤدي عمليات الكتابة إلى قواعد بيانات الإنتاج الخاصة بك إلى تشغيل الوظائف التي تقوم بعمل نماذج أولية لها محليًا.
للتبديل إلى جعل تطبيقك يقوم بالكتابة على قاعدة البيانات ، ستحتاج إلى توجيه فصول الاختبار أو التكوين داخل التطبيق إلى محاكي Cloud Firestore.
Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val firestore = Firebase.firestore firestore.useEmulator("10.0.2.2", 8080) firestore.firestoreSettings = firestoreSettings { isPersistenceEnabled = false }
Java
// 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);
سويفت
let settings = Firestore.firestore().settings settings.host = "localhost:8080" settings.isPersistenceEnabled = false settings.isSSLEnabled = false Firestore.firestore().settings = settings
Web version 9
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, 'localhost', 8080);
Web version 8
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("localhost", 8080); }
أتمتة اختباراتك باستخدام البرامج النصية المخصصة
الآن بالنسبة لخطوة سير العمل الإجمالية الأخيرة. بمجرد الانتهاء من وضع نموذج أولي لميزتك داخل التطبيق وتبدو واعدة على جميع الأنظمة الأساسية الخاصة بك ، يمكنك الانتقال إلى التنفيذ والاختبار النهائيين. بالنسبة لاختبار الوحدة وسير عمل CI ، يمكنك بدء تشغيل المحاكيات وتشغيل الاختبارات النصية وإيقاف تشغيل المحاكيات في مكالمة واحدة باستخدام الأمر exec
:
firebase emulators:exec "./testdir/test.sh"
استكشف المحاكيات الفردية بمزيد من العمق
الآن بعد أن رأيت كيف يبدو سير العمل الأساسي من جانب العميل ، يمكنك متابعة التفاصيل حول المحاكيات الفردية في Suite ، بما في ذلك كيفية استخدامها لتطوير التطبيقات من جانب الخادم:
- أضف محاكي المصادقة إلى تدفقات عمل النماذج الأولية الخاصة بك
- تعرف على ميزات محاكي Realtime Database بشكل متعمق
- تعرف على ميزات Cloud Storage for Firebase emulator بالتفصيل
- تعرف على ميزات محاكي Cloud Firestore بالتفصيل
- قم بتوصيل تطبيقك بمحاكي وظائف السحابة
- قم بتقييم ملحقات Firebase مع تقليل تكاليف الفواتير باستخدام محاكي الإضافات
ماذا بعد؟
تأكد من قراءة الموضوعات المتعلقة بمحاكيات محددة مرتبطة أعلاه. ثم:
- للحصول على مجموعة منسقة من مقاطع الفيديو وأمثلة تفصيلية عن كيفية التنفيذ ، اتبع قائمة تشغيل تدريب Firebase Emulators .
- تحقق من حالات الاستخدام المتقدمة التي تتضمن اختبار قواعد الأمان و Firebase Test SDK: اختبار قواعد الأمان (Cloud Firestore) ، واختبار قواعد الأمان (Realtime Database) ، واختبار قواعد الأمان (Cloud Storage for Firebase) .