برنامه خود را به شبیه ساز Cloud Firestore متصل کنید

قبل از اتصال برنامه‌تان به شبیه‌ساز Cloud Firestore، مطمئن شوید که گردش کار مجموعه محلی شبیه‌ساز محلی Firebase را درک کرده‌اید ، و مجموعه شبیه‌ساز محلی را نصب و پیکربندی کرده و دستورات CLI آن را مرور می‌کنید.

یک پروژه Firebase را انتخاب کنید

مجموعه شبیه ساز محلی Firebase محصولات را برای یک پروژه Firebase تقلید می کند.

برای انتخاب پروژه مورد استفاده، قبل از شروع شبیه سازها، در CLI firebase use . یا، می توانید پرچم --project را به هر فرمان شبیه ساز ارسال کنید.

Local Emulator Suite از شبیه سازی پروژه های Firebase واقعی و پروژه های آزمایشی پشتیبانی می کند.

نوع پروژه امکانات با شبیه سازها استفاده کنید
واقعی

یک پروژه Firebase واقعی پروژه ای است که شما ایجاد و پیکربندی کرده اید (به احتمال زیاد از طریق کنسول Firebase).

پروژه های واقعی دارای منابع زنده هستند، مانند نمونه های پایگاه داده، سطل های ذخیره سازی، توابع یا هر منبع دیگری که برای آن پروژه Firebase تنظیم کرده اید.

هنگام کار با پروژه های Firebase واقعی، می توانید شبیه سازها را برای هر یک یا همه محصولات پشتیبانی شده اجرا کنید.

برای هر محصولی که شبیه‌سازی نمی‌کنید، برنامه‌ها و کد شما با منبع زنده (نمونه پایگاه داده، سطل ذخیره‌سازی، عملکرد و غیره) تعامل خواهند داشت.

نسخه ی نمایشی

یک پروژه Firebase آزمایشی هیچ پیکربندی Firebase واقعی و هیچ منبع زنده ای ندارد. این پروژه ها معمولاً از طریق نرم افزارهای کد یا آموزش های دیگر قابل دسترسی هستند.

شناسه های پروژه برای پروژه های نمایشی دارای پیشوند demo- هستند.

هنگام کار با پروژه های Firebase آزمایشی، برنامه ها و کد شما فقط با شبیه سازها تعامل دارند. اگر برنامه شما سعی کند با منبعی که شبیه ساز برای آن اجرا نمی شود تعامل داشته باشد، آن کد با شکست مواجه می شود.

توصیه می کنیم تا جایی که امکان دارد از پروژه های نمایشی استفاده کنید. مزایا عبارتند از:

  • راه اندازی آسان تر، زیرا می توانید شبیه سازها را بدون ایجاد پروژه Firebase اجرا کنید
  • ایمنی قوی تر، زیرا اگر کد شما به طور تصادفی منابع غیر شبیه سازی شده (تولید) را فراخوانی کند، هیچ شانسی برای تغییر داده، استفاده و صورتحساب وجود ندارد.
  • پشتیبانی آفلاین بهتر است، زیرا برای دانلود پیکربندی SDK نیازی به دسترسی به اینترنت نیست.

برنامه خود را برای صحبت با شبیه سازها ابزار کنید

هنگام راه‌اندازی، شبیه‌ساز Cloud Firestore یک پایگاه داده پیش‌فرض و یک پایگاه داده با نام برای هر پیکربندی firestore در فایل firebase.json شما ایجاد می‌کند. از فایل firebase.json خود برای تخصیص صریح قوانین امنیتی Cloud Firestore به یک پایگاه داده با نام استفاده کنید.

پایگاه‌های داده نام‌گذاری شده نیز به طور ضمنی در پاسخ به هر فراخوانی SDK یا REST API به شبیه‌ساز ایجاد می‌شوند که به یک پایگاه داده خاص اشاره می‌کند. چنین پایگاه های داده ای که به طور ضمنی ایجاد شده اند با قوانین باز عمل می کنند.

در حال حاضر، رابط کاربری Emulator Suite از کار تعاملی با پایگاه داده پیش‌فرض پشتیبانی می‌کند.

پلتفرم‌های اندروید، اپل و وب SDK

پیکربندی درون برنامه ای یا کلاس های آزمایشی خود را برای تعامل با Cloud Firestore به شرح زیر تنظیم کنید. توجه داشته باشید که در نمونه های زیر، کد برنامه در حال اتصال به پایگاه داده پیش فرض پروژه است. برای مثال‌هایی که شامل پایگاه‌های اطلاعاتی 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);
}

برای آزمایش عملکردهای Cloud که توسط رویدادهای Firestore با استفاده از شبیه‌ساز راه‌اندازی می‌شوند، نیازی به تنظیمات اضافی نیست. هنگامی که شبیه سازهای Firestore و Cloud Functions هر دو در حال اجرا هستند، به طور خودکار با هم کار می کنند.

SDK های مدیریت

هنگامی که متغیر محیطی FIRESTORE_EMULATOR_HOST تنظیم شود، SDKهای مدیریت Firebase به طور خودکار به شبیه ساز Cloud Firestore متصل می شوند:

export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"

اگر کد شما در داخل شبیه ساز توابع Cloud اجرا می شود، شناسه پروژه و سایر پیکربندی ها به طور خودکار هنگام فراخوانی initializeApp تنظیم می شوند.

اگر می‌خواهید کد Admin SDK شما به شبیه‌ساز مشترکی که در محیط دیگری اجرا می‌شود متصل شود، باید همان ID پروژه‌ای را که با استفاده از Firebase CLI تنظیم کرده‌اید، مشخص کنید. می‌توانید یک شناسه پروژه را برای initializeApp به طور مستقیم ارسال کنید یا متغیر محیطی GCLOUD_PROJECT را تنظیم کنید.

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
متغیر محیطی
export GCLOUD_PROJECT="your-project-id"

پایگاه داده خود را بین تست ها پاک کنید

Production Firestore هیچ روش SDK پلت فرمی را برای شستشوی پایگاه داده ارائه نمی دهد، اما شبیه ساز Firestore یک نقطه پایانی REST به طور خاص برای این منظور به شما می دهد، که می تواند از یک مرحله راه اندازی/tearDown چارچوب آزمایشی، از یک کلاس آزمایشی یا از پوسته فراخوانی شود (مثلاً ، با curl ) قبل از شروع آزمون. شما می توانید از این رویکرد به عنوان جایگزینی برای خاموش کردن فرآیند شبیه ساز استفاده کنید.

در یک روش مناسب، یک عملیات HTTP DELETE را انجام دهید و پروژه ID Firebase خود را، برای مثال firestore-emulator-example ، به نقطه پایانی زیر ارائه دهید:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

به طور طبیعی، کد شما باید منتظر تایید REST باشد که فلاش تمام شده یا ناموفق است.

می توانید این عملیات را از پوسته انجام دهید:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

با اجرای مرحله‌ای مانند این، می‌توانید تست‌های خود را ترتیب داده و عملکردهای خود را با اطمینان از پاک شدن داده‌های قدیمی بین اجراها و استفاده از یک پیکربندی آزمایشی پایه جدید، راه‌اندازی کنید.

واردات و صادرات داده ها

پایگاه داده و شبیه سازهای Cloud Storage برای Firebase به شما امکان می دهند داده ها را از یک نمونه شبیه ساز در حال اجرا صادر کنید. مجموعه‌ای از داده‌ها را برای استفاده در آزمایش‌های واحد یا گردش‌های کاری پیوسته یکپارچه تعریف کنید، سپس آن‌ها را صادر کنید تا بین تیم به اشتراک گذاشته شود.

firebase emulators:export ./dir

در آزمایش‌ها، هنگام راه‌اندازی شبیه‌ساز، داده‌های پایه را وارد کنید.

firebase emulators:start --import=./dir

می‌توانید به شبیه‌ساز دستور دهید در هنگام خاموش شدن، داده‌ها را صادر کند، یا یک مسیر صادراتی را مشخص کنید یا به سادگی با استفاده از مسیر ارسال شده به پرچم --import .

firebase emulators:start --import=./dir --export-on-exit

این گزینه های واردات و صادرات داده ها با فرمان firebase emulators:exec نیز کار می کنند. برای اطلاعات بیشتر به مرجع فرمان شبیه ساز مراجعه کنید.

فعالیت قوانین امنیتی را تجسم کنید

همانطور که از طریق نمونه اولیه و حلقه های آزمایشی کار می کنید، می توانید از ابزارهای تجسم و گزارش های ارائه شده توسط Local Emulator Suite استفاده کنید.

از مانیتور درخواست ها استفاده کنید

شبیه ساز Cloud Firestore به شما امکان می دهد درخواست های مشتری را در رابط کاربری Emulator Suite تجسم کنید، از جمله ردیابی ارزیابی برای قوانین امنیتی Firebase.

برای مشاهده توالی ارزیابی دقیق برای هر درخواست، برگه Firestore > Requests را باز کنید.

مانیتور درخواست‌های شبیه‌ساز Firestore که ارزیابی‌های قوانین امنیتی را نشان می‌دهد

گزارش های ارزیابی قوانین را تجسم کنید

همانطور که قوانین امنیتی را به نمونه اولیه خود اضافه می کنید، می توانید آنها را با ابزارهای اشکال زدایی Local Emulator Suite رفع اشکال کنید.

پس از اجرای مجموعه‌ای از آزمایش‌ها، می‌توانید به گزارش‌های پوشش آزمایشی دسترسی پیدا کنید که نشان می‌دهد هر یک از قوانین امنیتی شما چگونه ارزیابی شده است.

برای دریافت گزارش‌ها، در حین اجرای شبیه‌ساز، یک نقطه پایانی در معرض نمایش را جستجو کنید. برای یک نسخه مرورگر پسند، از URL زیر استفاده کنید:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

این قوانین شما را به عبارات و عبارات فرعی تبدیل می کند که می توانید برای اطلاعات بیشتر، از جمله تعداد ارزیابی ها و مقادیر برگردانده شده، ماوس را روی آن قرار دهید. برای نسخه خام JSON این داده، URL زیر را در جستار خود قرار دهید:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

در اینجا، نسخه HTML گزارش ارزیابی‌هایی را برجسته می‌کند که خطاهای نامشخص و با مقدار تهی ایجاد می‌کنند:

چگونه شبیه ساز Cloud Firestore با تولید متفاوت است

شبیه ساز Cloud Firestore تلاش می کند تا رفتار سرویس تولید را با برخی محدودیت های قابل توجه به درستی تکرار کند.

پشتیبانی از پایگاه داده چندگانه برای Cloud Firestore

در حال حاضر، رابط کاربری Emulator Suite از ایجاد تعاملی، ویرایش، حذف، نظارت بر درخواست و تجسم امنیت برای یک پایگاه داده پیش‌فرض پشتیبانی می‌کند، اما از پایگاه‌های داده نام‌گذاری شده اضافی پشتیبانی نمی‌کند.

با این حال، شبیه ساز خود یک پایگاه داده با نام را بر اساس پیکربندی موجود در فایل firebase.json شما و به طور ضمنی در پاسخ به تماس های SDK یا REST API ایجاد می کند.

معاملات

شبیه ساز در حال حاضر تمام رفتار تراکنش هایی که در تولید مشاهده می شود را اجرا نمی کند. هنگامی که در حال آزمایش ویژگی هایی هستید که شامل چندین نوشتن همزمان در یک سند است، ممکن است شبیه ساز در تکمیل درخواست های نوشتن کند باشد. در برخی موارد، باز شدن قفل ها ممکن است تا 30 ثانیه طول بکشد. در صورت نیاز، زمان‌های تست را بر این اساس تنظیم کنید.

شاخص ها

شبیه ساز شاخص های مرکب را ردیابی نمی کند و در عوض هر درخواست معتبری را اجرا می کند. مطمئن شوید که برنامه خود را در برابر یک نمونه واقعی Cloud Firestore تست کنید تا مشخص کنید به کدام شاخص نیاز دارید.

محدودیت ها

شبیه ساز تمام محدودیت های اعمال شده در تولید را اعمال نمی کند. به عنوان مثال، شبیه ساز ممکن است تراکنش هایی را که ممکن است توسط سرویس تولید رد شوند، مجاز می کند. اطمینان حاصل کنید که با محدودیت های مستند آشنا هستید و برنامه خود را طوری طراحی می کنید که فعالانه از آنها اجتناب کنید.

بعدش چی؟