قبل البدء في استخدام Firebase Local Emulator Suite، تأكَّد من إنشاء مشروع Firebase، وإعداد بيئة التطوير، واختيار حِزم تطوير البرامج (SDK) لمنصّة Firebase وتثبيتها على منصّتك وفقًا لمواضيع بدء استخدام Firebase لمنصّتك: أجهزة Apple، Android أو الويب.
تطوير النماذج الأولية واختبارها
تحتوي Local Emulator Suite على عدة محاكيات للمنتجات، كما هو موضّح في مقدّمة عن Firebase Local Emulator Suite. يمكنك تطوير النماذج الأولية وإجراء الاختبارات باستخدام محاكيات فردية بالإضافة إلى مجموعات من المحاكيات، حسب ما تراه مناسبًا، بما يتوافق مع منتجات Firebase التي تستخدمها في مرحلة الإنتاج.
بالنسبة إلى هذا الموضوع، لتقديم سير عمل Local Emulator Suite، لنفترض أنّك تعمل على تطبيق يستخدم مجموعة نموذجية من المنتجات: قاعدة بيانات Firebase ودوال Cloud يتم تفعيلها من خلال عمليات على قاعدة البيانات هذه.
بعد إعداد مشروع Firebase محليًا، ستتضمّن عادةً دورة التطوير باستخدام Local Emulator Suite ثلاث خطوات:
تطوير النماذج الأولية للميزات بشكل تفاعلي باستخدام المحاكيات وEmulator Suite UI
إذا كنت تستخدم محاكي قاعدة بيانات أو المحاكي Cloud Functions، عليك تنفيذ خطوة لمرة واحدة لربط تطبيقك بالمحاكيات.
أتمِتة اختباراتك باستخدام المحاكيات والبرامج النصية المخصّصة
إعداد مشروع Firebase محليًا
تأكَّد من تثبيت واجهة سطر الأوامر أو التحديث إلى أحدث إصدار منها.
curl -sL firebase.tools | bashإذا لم يسبق لك ذلك، عليك إعداد دليل العمل الحالي كمشروع Firebase على Firebase، باتّباع التعليمات التي تظهر على الشاشة لتحديد أنّك تستخدم Cloud Functions و إما Cloud Firestore أو Realtime Database:
firebase initسيحتوي دليل مشروعك الآن على ملفات إعداد Firebase، و
Firebase Security Rules تعريف لقاعدة البيانات، ودليل functions يحتوي
على رمز دوال Cloud، وملفات دعم أخرى.
تطوير النماذج الأولية بشكل تفاعلي
تم تصميم Local Emulator Suite للسماح لك بتطوير نماذج أولية للميزات الجديدة بسرعة، وتُعدّ واجهة المستخدم المضمّنة في المجموعة إحدى أكثر أدوات تطوير النماذج الأولية فائدةً. إنّها تشبه إلى حدّ ما تشغيل وحدة تحكم Firebase محليًا.
باستخدام Emulator Suite UI، يمكنك تكرار تصميم قاعدة بيانات، وتجربة تدفقات بيانات مختلفة تتضمّن دوال Cloud، وتقييم تغييرات "قواعد الأمان"، والتحقّق من السجلات للتأكّد من أداء خدماتك للواجهة الخلفية، وغير ذلك. بعد ذلك، إذا أردت البدء من جديد، ما عليك سوى محو قاعدة بياناتك والبدء من جديد بفكرة تصميم جديدة.
تتوفّر كل هذه الميزات عند بدء Local Emulator Suite باستخدام الأمر:
firebase emulators:startلتطوير نموذج أوّلي لتطبيقنا الافتراضي، لنعدّ ونختبر دالة أساسية على Cloud لتعديل إدخالات النص في قاعدة بيانات، وننشئ قاعدة البيانات هذه ونملأها في Emulator Suite UI لتفعيلها.
- أنشئ دالة على Cloud يتم تفعيلها من خلال عمليات الكتابة في قاعدة البيانات عن طريق تعديل الملف
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. يؤدي ذلك إلى تفعيل دالة Cloud. لاحظ ظهور حقل جديد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}); });
يمكنك التكرار بسهولة بين رمز دالة Cloud وعمليات التعديل التفاعلية لقاعدة البيانات إلى أن تحصل على تدفق البيانات الذي تبحث عنه، بدون تعديل رمز الوصول إلى قاعدة البيانات داخل التطبيق، وإعادة تجميع مجموعات الاختبار وإعادة تشغيلها.
ربط تطبيقك بالمحاكيات
عند إحراز تقدّم جيد في تطوير النماذج الأولية بشكل تفاعلي والوصول إلى تصميم نهائي، ستكون مستعدًا لإضافة رمز الوصول إلى قاعدة البيانات إلى تطبيقك باستخدام حزمة 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
- تقييم Firebase Extensions مع تقليل تكاليف الفوترة باستخدام محاكي Extensions
الخطوات التالية
احرص على قراءة المواضيع ذات الصلة بالمحاكيات المحدّدة المرتبطة أعلاه. بعد ذلك:
- للاطّلاع على مجموعة منسّقة من الفيديوهات والأمثلة التفصيلية، يمكنك اتّباع قائمة تشغيل التدريب على محاكيات Firebase.
- استكشِف حالات الاستخدام المتقدّمة التي تتضمّن اختبار "قواعد الأمان" و حزمة Firebase Test SDK: اختبار "قواعد الأمان" (Cloud Firestore) ، واختبار "قواعد الأمان" (Realtime Database)، و اختبار "قواعد الأمان" (Cloud Storage for Firebase).