قبل الانتقال إلى استخدام 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}); });
يمكنك بسهولة التبديل بين رمز دالة السحابة الإلكترونية وتعديلات قاعدة بيانات interactive إلى أن تحصل على تدفق البيانات الذي تبحث عنه، بدون تعديل رمز الوصول إلى قاعدة البيانات داخل التطبيق وإعادة تجميع مجموعات الاختبار وإعادة تشغيلها.
ربط تطبيقك بالمحاكيات
عندما تحرز تقدمًا جيدًا في النماذج الأولية التفاعلية واستقرت على تصميم، ستكون جاهزًا لإضافة رمز دخول قاعدة البيانات إلى تطبيقك باستخدام 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);
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); }
برمجة الاختبارات باستخدام نصوص برمجية مخصّصة
والآن، في الخطوة الأخيرة الشاملة في سير العمل. بمجرد إنشاء النموذج الأولي لميزتك داخل التطبيق وتبدو واعدة على جميع الأنظمة الأساسية، يمكنك الانتقال إلى التنفيذ والاختبار النهائيين. بالنسبة إلى اختبار الوحدات وسير عمل CI، يمكنك تشغيل أدوات المحاكاة وإجراء الاختبارات البرمجية وإيقاف أدوات المحاكاة في استدعاء واحد باستخدام الأمر exec
:
firebase emulators:exec "./testdir/test.sh"
استكشاف المحاكيات الفردية بمزيد من التفصيل
بعد أن اطّلعت على مخطّط العمل الأساسي من جهة العميل، يمكنك متابعة الاطّلاع على تفاصيل حول المحاكيات الفردية في المجموعة، بما في ذلك كيفية استخدامها لتطوير التطبيقات من جهة الخادم:
- إضافة محاكي Authentication إلى عمليات إنشاء النماذج الأولية
- التعرّف بالتفصيل على ميزات محاكي "Realtime Database"
- التعرّف بالتفصيل على ميزات محاكي "Cloud Storage for Firebase"
- التعرّف على ميزات المحاكي Cloud Firestore بالتفصيل
- ربط تطبيقك بمحاكي Cloud Functions
- تقييم Firebase Extensions مع الحدّ من تكاليف الفوترة باستخدام محاكي Extensions
ما هي الخطوات التالية؟
تأكد من قراءة الموضوعات المتعلقة بالمحاكيات المحددة المرتبطة أعلاه. بعد ذلك:
- للحصول على مجموعة منظَّمة من الفيديوهات وأمثلة تفصيلية حول التعليمات، اتّبِع قائمة تشغيل التدريب على أدوات محاكاة Firebase.
- يمكنك التحقيق في حالات الاستخدام المتقدّمة التي تشمل اختبار "قواعد الأمان" وحزمة تطوير البرامج (SDK) لاختبار Firebase، وهي تشمل ما يلي: اختبار قواعد الأمان (Cloud Firestore) واختبار قواعد الأمان (Realtime Database) واختبار قواعد الأمان (Cloud Storage for Firebase).