قم بتوصيل تطبيقك وابدأ في إنشاء النماذج الأولية

في الوقت الحقيقي

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

النموذج الأولي والاختبار

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

التفاعل بين قاعدة بيانات Firebase ومحاكيات الوظائف
محاكيات قاعدة البيانات والوظائف السحابية كجزء من مجموعة المحاكي المحلية الكاملة .

بالنسبة لهذا الموضوع، ولتقديم سير عمل Local Emulator Suite، لنفترض أنك تعمل على تطبيق يستخدم مجموعة نموذجية من المنتجات: قاعدة بيانات Firebase ووظائف السحابة التي يتم تشغيلها بواسطة العمليات في قاعدة البيانات هذه.

بعد تهيئة مشروع Firebase محليًا، ستتكون دورة التطوير باستخدام Local Emulator Suite عادةً من ثلاث خطوات:

  1. يتميز النموذج الأولي بشكل تفاعلي مع المحاكيات وEmulator Suite UI.

  2. إذا كنت تستخدم محاكي قاعدة بيانات أو محاكي Cloud Functions، فقم بإجراء خطوة لمرة واحدة لتوصيل تطبيقك بالمحاكيات.

  3. قم بأتمتة اختباراتك باستخدام المحاكيات والبرامج النصية المخصصة.

تهيئة مشروع Firebase محليًا

تأكد من تثبيت واجهة سطر الأوامر (CLI) أو التحديث إلى أحدث إصدار لها .

curl -sL firebase.tools | bash

إذا لم تكن قد قمت بذلك بالفعل، فقم بتهيئة دليل العمل الحالي كمشروع Firebase، باتباع المطالبات التي تظهر على الشاشة لتحديد أنك تستخدم Cloud Functions وإما 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 لتشغيلها.

  1. قم بإنشاء وظيفة سحابية يتم تشغيلها بواسطة عمليات الكتابة في قاعدة البيانات عن طريق تحرير ملف functions/index.js في دليل المشروع الخاص بك. استبدل محتويات الملف الموجود بالمقتطف التالي. تستمع هذه الوظيفة إلى التغييرات التي تطرأ على المستندات في مجموعة messages ، وتحول محتويات الحقل original للمستند إلى أحرف كبيرة، وتخزن النتيجة في الحقل uppercase لذلك المستند.
  2.   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});
          });
      
  3. قم بتشغيل Local Emulator Suite باستخدام firebase emulators:start . يتم بدء تشغيل وظائف السحابة ومحاكيات قاعدة البيانات، ويتم تكوينها تلقائيًا للتشغيل التفاعلي.
  4. اعرض واجهة المستخدم في متصفحك على http://localhost:4000 . المنفذ 4000 هو المنفذ الافتراضي لواجهة المستخدم، ولكن تحقق من إخراج الرسائل الطرفية بواسطة واجهة سطر أوامر Firebase. لاحظ حالة المحاكيات المتاحة. في حالتنا، سيتم تشغيل محاكيات Cloud Functions وCloud Firestore.
    صورتي
  5. في واجهة المستخدم، في Firestore > علامة التبويب البيانات ، انقر فوق بدء المجموعة واتبع المطالبات لإنشاء مستند جديد في مجموعة messages ، باستخدام اسم الحقل original test القيمة . يؤدي هذا إلى تشغيل وظيفة السحابة لدينا. لاحظ ظهور حقل جديد uppercase بعد قليل، معبأ بالسلسلة "TEST".
    صورتيصورتي
  6. في علامة التبويب Firestore > الطلبات ، افحص الطلبات المقدمة إلى قاعدة بياناتك التي تمت محاكاتها، بما في ذلك جميع تقييمات قواعد أمان Firebase التي تم إجراؤها كجزء من تلبية تلك الطلبات.
  7. تحقق من علامة التبويب "السجلات" للتأكد من أن وظيفتك لم تتعرض لأي أخطاء أثناء تحديث قاعدة البيانات.

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

قم بتوصيل تطبيقك بالمحاكيات

عندما تحرز تقدمًا جيدًا في النماذج الأولية التفاعلية وتستقر على التصميم، ستكون جاهزًا لإضافة رمز الوصول إلى قاعدة البيانات إلى تطبيقك باستخدام 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 = "127.0.0.1:8080"
settings.cacheSettings = MemoryCacheSettings()
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web modular API

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

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

Web namespaced API

// 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"

استكشف المحاكيات الفردية بمزيد من التعمق

الآن بعد أن رأيت كيف يبدو سير العمل الأساسي من جانب العميل، يمكنك متابعة التفاصيل حول المحاكيات الفردية في Suite، بما في ذلك كيفية استخدامها لتطوير التطبيقات من جانب الخادم:

ماذا بعد؟

تأكد من قراءة المواضيع المتعلقة بمحاكيات محددة مرتبطة أعلاه. ثم: