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

في هذا الموضوع، ولتقديم سير عمل Local Emulator Suite، لنفترض أنّك تعمل على تطبيق يستخدم مجموعة نموذجية من المنتجات: قاعدة بيانات Firebase ووظائف سحابية يتم تشغيلها من خلال عمليات على قاعدة البيانات هذه.
بعد إعداد مشروع Firebase محليًا، ستتضمّن دورة التطوير باستخدام Local Emulator Suite عادةً ثلاث خطوات:
التفاعل مع ميزات النموذج الأوّلي بشكل تفاعلي باستخدام المحاكيات وEmulator Suite UI
إذا كنت تستخدم محاكي قاعدة بيانات أو محاكي Cloud Functions، عليك تنفيذ خطوة لمرة واحدة لربط تطبيقك بالمحاكيات.
يمكنك إعداد الاختبارات تلقائيًا باستخدام المحاكيات والنصوص البرمجية المخصّصة.
إعداد مشروع Firebase محليًا
تأكَّد من تثبيت واجهة سطر الأوامر أو التحديث إلى أحدث إصدار.
curl -sL firebase.tools | bash
إذا لم يسبق لك إجراء ذلك، عليك تهيئة دليل العمل الحالي كمشروع Firebase، واتّباع الطلبات التي تظهر على الشاشة لتحديد أنّك تستخدم Cloud Functions وCloud Firestore أو Realtime Database:
firebase init
سيحتوي دليل مشروعك الآن على ملفات إعداد Firebase، وملف تعريف Firebase Security Rules لقاعدة البيانات، ودليل functions
يحتوي على رمز دوال السحابة الإلكترونية، وملفات دعم أخرى.
التفاعل مع النموذج الأولي
تم تصميم Local Emulator Suite للسماح لك بإنشاء نماذج أولية للميزات الجديدة بسرعة، وتُعد واجهة المستخدم المضمّنة في Suite إحدى أدوات إنشاء النماذج الأولية الأكثر فائدة. يشبه ذلك إلى حدّ ما تشغيل وحدة تحكّم Firebase على الجهاز.
باستخدام Emulator Suite UI، يمكنك تكرار تصميم قاعدة بيانات، وتجربة تدفقات بيانات مختلفة تتضمّن دوال سحابية، وتقييم تغييرات "قواعد الأمان"، والاطّلاع على السجلات للتأكّد من أداء خدمات الخلفية، وغير ذلك. بعد ذلك، إذا أردت البدء من جديد، ما عليك سوى محو قاعدة البيانات والبدء بفكرة تصميم جديدة.
تتوفّر كل هذه الميزات عند بدء Local Emulator Suite باستخدام:
firebase emulators:start
لإنشاء نموذج أولي لتطبيقنا الافتراضي، لنقم بإعداد واختبار دالة سحابية أساسية لتعديل إدخالات نصية في قاعدة بيانات، وإنشاء قاعدة البيانات هذه وتعبئتها في Emulator Suite UI لتشغيلها.
- أنشئ دالة سحابية يتم تشغيلها عند كتابة البيانات في قاعدة البيانات من خلال تعديل الملف
functions/index.js
في دليل مشروعك. استبدِل محتوى الملف الحالي بالمقتطف التالي. تستمع هذه الدالة إلى التغييرات التي تطرأ على المستندات في المجموعةmessages
، وتحوّل محتوى الحقلoriginal
في المستند إلى أحرف كبيرة، وتخزّن النتيجة في الحقلuppercase
في المستند. - ابدأ تشغيل Local Emulator Suite باستخدام
firebase emulators:start
. يتم تشغيل محاكيَي Cloud Functions وقاعدة البيانات، ويتم ضبطهما تلقائيًا للعمل معًا. - يمكنك عرض واجهة المستخدم في المتصفّح على
http://localhost:4000
. المنفذ 4000 هو المنفذ التلقائي لواجهة المستخدم، ولكن يُرجى التحقّق من ناتج رسائل الوحدة الطرفية التي تعرضها واجهة سطر الأوامر Firebase. دوِّن حالة المحاكيات المتاحة. في حالتنا، سيتم تشغيل المحاكيَين Cloud Functions وCloud Firestore.
- في واجهة المستخدم، ضِمن علامة التبويب Firestore > البيانات، انقر على
بدء عملية الجمع واتّبِع التعليمات لإنشاء مستند جديد في
مجموعة
messages
، مع اسم الحقلoriginal
والقيمةtest
. سيؤدي ذلك إلى تشغيل دالة السحابة. لاحظ ظهور حقلuppercase
جديد بعد فترة وجيزة، مع ملء الحقل بالسلسلة "TEST".
- في علامة التبويب Firestore > الطلبات، يمكنك فحص الطلبات المقدَّمة إلى قاعدة البيانات المحاكية، بما في ذلك جميع تقييمات Firebase Security Rules التي تم إجراؤها كجزء من تنفيذ هذه الطلبات.
- راجِع علامة التبويب السجلات للتأكّد من أنّ الدالة لم تواجه أي أخطاء أثناء تعديل قاعدة البيانات.
const functions = require('firebase-functions/v1'); 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
// 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);
Swift
let settings = Firestore.firestore().settings settings.host = "127.0.0.1:8080" settings.cacheSettings = MemoryCacheSettings() settings.isSSLEnabled = false Firestore.firestore().settings = settings
Web
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, '127.0.0.1', 8080);
Web
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("127.0.0.1", 8080); }
أتمِتة اختباراتك باستخدام نصوص برمجية مخصّصة
الآن، ننتقل إلى الخطوة الأخيرة في سير العمل بشكل عام. بعد إنشاء نموذج أوّلي للميزة داخل التطبيق والتأكّد من أنّها تبدو واعدة على جميع المنصات، يمكنك الانتقال إلى التنفيذ النهائي والاختبار. بالنسبة إلى اختبارات الوحدات وسير عمل التكامل المستمر، يمكنك بدء المحاكيات وتشغيل الاختبارات المكتوبة وإيقاف المحاكيات في طلب واحد باستخدام الأمر exec
:
firebase emulators:exec "./testdir/test.sh"
استكشاف المحاكيات الفردية بمزيد من التفصيل
بعد أن تعرّفت على الشكل الأساسي لسير العمل من جهة العميل، يمكنك مواصلة الاطّلاع على تفاصيل حول المحاكيات الفردية في الحزمة، بما في ذلك كيفية استخدامها لتطوير التطبيقات من جهة الخادم:
- إضافة محاكي Authentication إلى سير عمل النماذج الأولية
- مزيد من المعلومات عن ميزات محاكي Realtime Database
- مزيد من المعلومات عن ميزات محاكي Cloud Storage for Firebase
- مزيد من المعلومات عن ميزات محاكي Cloud Firestore
- ربط تطبيقك بمحاكي Cloud Functions
- تقييم Firebase Extensions مع تقليل تكاليف الفوترة إلى الحدّ الأدنى باستخدام Extensions المحاكي
ما هي الخطوات التالية؟
احرص على قراءة المواضيع ذات الصلة بمحاكيات معيّنة والمرتبطة أعلاه. بعد ذلك:
- للحصول على مجموعة منظَّمة من الفيديوهات وأمثلة تفصيلية حول كيفية الاستخدام، يمكنك متابعة قائمة تشغيل التدريب على محاكيات Firebase.
- استكشاف حالات الاستخدام المتقدّمة التي تتضمّن اختبار "قواعد الأمان" وFirebase Test SDK: اختبار "قواعد الأمان" (Cloud Firestore) واختبار "قواعد الأمان" (Realtime Database) واختبار "قواعد الأمان" (Cloud Storage for Firebase)