قبل از اتصال برنامه خود به شبیهساز Realtime Database ، مطمئن شوید که گردش کار کلی Firebase Local Emulator Suite را درک کردهاید ، و Local Emulator Suite را نصب و پیکربندی کردهاید و دستورات CLI آن را بررسی کردهاید.
یک پروژه فایربیس انتخاب کنید
Firebase Local Emulator Suite محصولات مربوط به یک پروژه فایربیس را شبیهسازی میکند.
برای انتخاب پروژه مورد استفاده، قبل از شروع شبیهسازها، در CLI firebase use در دایرکتوری کاری خود اجرا کنید. یا میتوانید پرچم --project را به هر دستور شبیهساز ارسال کنید.
Local Emulator Suite از شبیهسازی پروژههای واقعی Firebase و پروژههای آزمایشی پشتیبانی میکند.
| نوع پروژه | ویژگیها | استفاده با شبیهسازها |
|---|---|---|
| واقعی | یک پروژه واقعی Firebase، پروژهای است که شما ایجاد و پیکربندی کردهاید (به احتمال زیاد از طریق کنسول Firebase ). پروژههای واقعی منابع زندهای دارند، مانند نمونههای پایگاه داده، مخازن ذخیرهسازی، توابع یا هر منبع دیگری که برای آن پروژه Firebase تنظیم کردهاید. | هنگام کار با پروژههای واقعی Firebase، میتوانید شبیهسازها را برای هر یا همه محصولات پشتیبانیشده اجرا کنید. برای هر محصولی که شبیهسازی نمیکنید، برنامهها و کد شما با منبع زنده (نمونه پایگاه داده، مخزن ذخیرهسازی، تابع و غیره) تعامل خواهند داشت. |
| نسخه آزمایشی | یک پروژه آزمایشی فایربیس هیچ پیکربندی واقعی فایربیس و هیچ منبع زندهای ندارد. این پروژهها معمولاً از طریق codelabs یا سایر آموزشها قابل دسترسی هستند. شناسههای پروژه برای پروژههای نمایشی دارای پیشوند | هنگام کار با پروژههای آزمایشی Firebase، برنامهها و کد شما فقط با شبیهسازها تعامل دارند. اگر برنامه شما سعی کند با منبعی که شبیهساز برای آن اجرا نمیشود، تعامل داشته باشد، آن کد با شکست مواجه خواهد شد. |
توصیه میکنیم تا حد امکان از پروژههای نمایشی استفاده کنید. مزایا عبارتند از:
- راهاندازی آسانتر، زیرا میتوانید شبیهسازها را بدون ایجاد یک پروژه Firebase اجرا کنید
- ایمنی قویتر، زیرا اگر کد شما بهطور تصادفی منابع شبیهسازی نشده (تولیدی) را فراخوانی کند، هیچ شانسی برای تغییر دادهها، استفاده و صدور صورتحساب وجود ندارد.
- پشتیبانی آفلاین بهتر، زیرا نیازی به دسترسی به اینترنت برای دانلود پیکربندی SDK شما نیست.
برنامه خود را برای ارتباط با شبیهسازها آماده کنید
پلتفرمهای اندروید، اپل و وب SDKها
پیکربندی درونبرنامهای یا کلاسهای آزمایشی خود را برای تعامل با Realtime Database به شرح زیر تنظیم کنید.
Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val database = Firebase.database database.useEmulator("10.0.2.2", 9000)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseDatabase database = FirebaseDatabase.getInstance(); database.useEmulator("10.0.2.2", 9000);
سویفت
// In almost all cases the ns (namespace) is your project ID. let db = Database.database(url:"http://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")
Web
import { getDatabase, connectDatabaseEmulator } from "firebase/database"; const db = getDatabase(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. connectDatabaseEmulator(db, "127.0.0.1", 9000); }
Web
var db = firebase.database(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. db.useEmulator("127.0.0.1", 9000); }
برای آزمایش توابع ابری که توسط رویدادهای پایگاه دادهی بیدرنگ با استفاده از شبیهساز فعال میشوند ، هیچ تنظیمات اضافی لازم نیست. وقتی شبیهسازهای پایگاه دادهی بیدرنگ و توابع ابری هر دو در حال اجرا هستند، به طور خودکار با هم کار میکنند.
Admin SDK
Firebase Admin SDK به طور خودکار به شبیهساز Realtime Database متصل میشود، زمانی که متغیر محیطی FIREBASE_DATABASE_EMULATOR_HOST تنظیم شده باشد:
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
اگر کد شما درون شبیهساز توابع ابری ( Cloud Functions ) اجرا میشود، شناسه پروژه و سایر پیکربندیهای شما هنگام فراخوانی initializeApp به طور خودکار تنظیم میشوند.
اگر میخواهید کد Admin SDK شما به یک شبیهساز مشترک که در محیط دیگری اجرا میشود متصل شود، باید همان شناسه پروژهای را که با استفاده از Firebase CLI تنظیم کردهاید، مشخص کنید. میتوانید شناسه پروژه را مستقیماً به initializeApp ارسال کنید یا متغیر محیطی GCLOUD_PROJECT را تنظیم کنید.
SDK مدیریت Node.js
admin.initializeApp({ projectId: "your-project-id" });
متغیر محیطی
export GCLOUD_PROJECT="your-project-id"
پایگاه داده خود را بین آزمایشها پاک کنید
برای خالی کردن Realtime Database بین فعالیتها، میتوانید مرجع پایگاه داده را پاک کنید. میتوانید از این رویکرد به عنوان جایگزینی برای خاموش کردن ساده فرآیند شبیهساز استفاده کنید.
Kotlin
// With a DatabaseReference, write null to clear the database. database.reference.setValue(null)
Java
// With a DatabaseReference, write null to clear the database. database.getReference().setValue(null);
سویفت
// With a DatabaseReference, write nil to clear the database. Database.database().reference().setValue(nil);
Web
import { getDatabase, ref, set } from "firebase/database"; // With a database Reference, write null to clear the database. const db = getDatabase(); set(ref(db), null);
Web
// With a database Reference, write null to clear the database. firebase.database().ref().set(null);
طبیعتاً، کد شما باید منتظر تأیید اتمام یا شکست عملیات flush با استفاده از ویژگیهای مدیریت رویداد ناهمزمان پلتفرم شما باشد.
با پیادهسازی چنین مرحلهای، میتوانید تستهای خود را ترتیببندی کرده و توابع خود را با اطمینان از اینکه دادههای قدیمی بین اجراها پاک میشوند و از یک پیکربندی تست پایه جدید استفاده میکنید، فعال کنید.
واردات و صادرات دادهها
پایگاه داده و Cloud Storage for Firebase به شما امکان میدهند دادهها را از یک نمونه شبیهساز در حال اجرا صادر کنید. یک مجموعه داده پایه برای استفاده در تستهای واحد یا گردشهای کاری ادغام مداوم خود تعریف کنید، سپس آن را برای اشتراکگذاری بین اعضای تیم صادر کنید.
firebase emulators:export ./dirدر تستها، در هنگام راهاندازی شبیهساز، دادههای پایه را وارد کنید.
firebase emulators:start --import=./dirشما میتوانید به شبیهساز دستور دهید که دادهها را پس از خاموش شدن، با مشخص کردن یک مسیر صادرات یا به سادگی با استفاده از مسیری که به پرچم --import منتقل میشود، صادر کند.
firebase emulators:start --import=./dir --export-on-exitاین گزینههای ایمپورت و اکسپورت دادهها با دستور firebase emulators:exec نیز کار میکنند. برای اطلاعات بیشتر، به مرجع دستور emulator مراجعه کنید.
تجسم فعالیت قوانین امنیتی
همانطور که روی حلقههای نمونه اولیه و تست کار میکنید، میتوانید از ابزارهای تجسم و گزارشهای ارائه شده توسط Local Emulator Suite استفاده کنید.
تجسم ارزیابی قوانین
همزمان با اضافه کردن قوانین امنیتی به نمونه اولیه خود، میتوانید آنها را با ابزارهای Local Emulator Suite اشکالزدایی کنید.
پس از اجرای مجموعهای از تستها، میتوانید به گزارشهای پوشش تست دسترسی پیدا کنید که نشان میدهد هر یک از قوانین شما چگونه ارزیابی شدهاند. برای دریافت گزارشها، در حالی که شبیهساز در حال اجرا است، یک نقطه پایانی در معرض دید را جستجو کنید. برای نسخهای که با مرورگر سازگار است، از URL زیر استفاده کنید:
http://localhost:9000/.inspect/coverage?ns=<database_name>
این دستور، قوانین شما را به عبارات و زیرعباراتی تقسیم میکند که میتوانید برای اطلاعات بیشتر، از جمله تعداد اجراها و مقادیر برگشتی، ماوس را روی آنها ببرید. برای نسخه خام JSON این دادهها، URL زیر را در کوئری خود وارد کنید:
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
بعدش چی؟
- برای مجموعهای منتخب از ویدیوها و مثالهای آموزشی دقیق، لیست پخش آموزش شبیهسازهای Firebase را دنبال کنید.
- موارد استفاده پیشرفته مربوط به تست قوانین امنیتی و Firebase Test SDK: Test Security Rules (Realtime Database) را بررسی کنید.
- از آنجایی که توابع فعالشده معمولاً با Realtime Database ادغام میشوند، برای کسب اطلاعات بیشتر در مورد Cloud Functions for Firebase به Run functions locally مراجعه کنید.