將應用程式連線至 Realtime Database 模擬器之前,請務必瞭解整體 Firebase Local Emulator Suite 工作流程,並安裝及設定 Local Emulator Suite,然後查看其 CLI 指令。
選擇 Firebase 專案
Firebase Local Emulator Suite 會模擬單一 Firebase 專案的產品。
如要選取要使用的專案,請先啟動模擬器,然後在工作目錄中執行 firebase use
。或者,您也可以將 --project
標記傳遞至每個模擬器指令。
Local Emulator Suite 支援模擬實際 Firebase 專案和示範專案。
專案類型 | 功能 | 搭配模擬器使用 |
---|---|---|
Real |
您建立及設定的 Firebase 專案 (很可能透過 Firebase 控制台) 才是實際專案。 實際專案具有即時資源,例如資料庫執行個體、儲存空間值區、函式,或是您為該 Firebase 專案設定的任何其他資源。 |
使用實際的 Firebase 專案時,您可以為任何或所有支援的產品執行模擬器。 對於您未模擬的任何產品,應用程式和程式碼都會與實際資源 (資料庫執行個體、儲存空間 bucket、函式等) 互動。 |
示範 |
示範 Firebase 專案沒有實際 Firebase 設定,也沒有即時資源。這些專案通常透過程式碼研究室或其他教學課程存取。 示範專案的專案 ID 前置字串為 |
使用 Firebase 示範專案時,應用程式和程式碼只會與模擬器互動。如果應用程式嘗試與未執行模擬器的資源互動,該程式碼就會失敗。 |
建議您盡可能使用範例專案。包括以下優點:
- 設定更簡單,因為您不必建立 Firebase 專案,就能執行模擬器
- 安全性更高,因為如果程式碼意外叫用非模擬 (正式版) 資源,就不會發生資料變更、用量和帳單問題
- 離線支援功能更完善,因為您不需要存取網際網路即可下載 SDK 設定。
檢測應用程式,與模擬器通訊
Android、Apple 平台和 Web 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);
Swift
// 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); }
如要使用模擬器測試由 Realtime Database 事件觸發的 Cloud Functions,不需要額外設定。Realtime Database 和 Cloud Functions 模擬器同時執行時,會自動搭配運作。
Admin SDK 秒
設定 FIREBASE_DATABASE_EMULATOR_HOST
環境變數後,Firebase Admin SDK 會自動連線至 Realtime Database 模擬器:
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
如果程式碼是在 Cloud Functions 模擬器中執行,呼叫 initializeApp
時,系統會自動設定專案 ID 和其他設定。
如要讓 Admin SDK 程式碼連線至在其他環境中執行的共用模擬器,您需要指定使用 Firebase CLI 設定的相同專案 ID。您可以將專案 ID 直接傳遞至 initializeApp
,或設定 GCLOUD_PROJECT
環境變數。
Node.js Admin SDK
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);
Swift
// 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);
當然,您的程式碼應使用平台的非同步事件處理功能,等待確認排清作業完成或失敗。
實作這類步驟後,您就能依序執行測試並觸發函式,確保舊資料會在執行期間清除,且您使用的是全新的基準測試設定。
匯入及匯出資料
資料庫和 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
指令。詳情請參閱模擬器指令參考資料。
以視覺化方式呈現安全性規則活動
在完成原型和測試迴圈的過程中,您可以使用 Local Emulator Suite 提供的視覺化工具和報表。
以視覺化方式呈現規則評估結果
在原型中新增安全規則時,您可以使用 Local Emulator Suite 工具進行偵錯。
執行一系列測試後,您就能存取測試涵蓋範圍報表,瞭解每項規則的評估方式。如要取得報表,請在模擬器執行時查詢公開端點。如要取得瀏覽器適用的版本,請使用下列網址:
http://localhost:9000/.inspect/coverage?ns=<database_name>
這會將規則分成運算式和子運算式,您只要將滑鼠游標懸停在運算式上,即可查看更多資訊,包括執行次數和傳回的值。如要取得這項資料的原始 JSON 版本,請在查詢中加入下列網址:
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
後續步驟
- 如需一系列精選影片和詳細使用說明範例,請觀看 Firebase 模擬器訓練播放清單。
- 調查涉及安全性規則測試和 Firebase Test SDK 的進階用途:測試安全性規則 (Realtime Database)。
- 由於觸發函式是與 Realtime Database 的典型整合,請參閱「在本機執行函式」一文,進一步瞭解 Cloud Functions for Firebase 模擬器。