在將您的應用程式連接到即時資料庫模擬器之前,請確保您了解 Firebase 本機模擬器套件的整體工作流程,並安裝和設定本機模擬器套件並查看其CLI 命令。
選擇 Firebase 項目
Firebase 本機模擬器套件模擬單一 Firebase 專案的產品。
若要選擇要使用的項目,請在啟動模擬器之前,在 CLI 中在工作目錄中執行firebase use
。或者,您可以將--project
標誌傳遞給每個模擬器指令。
本機模擬器套件支援模擬真實的Firebase 專案和演示專案。
項目類型 | 特徵 | 與模擬器一起使用 |
---|---|---|
真實的 | 真正的 Firebase 專案是您建立和配置的專案(很可能透過 Firebase 控制台)。 真實專案具有即時資源,例如資料庫執行個體、儲存桶、函數或您為該 Firebase 專案設定的任何其他資源。 | 在處理真實的 Firebase 專案時,您可以為任何或所有受支援的產品運行模擬器。 對於您未模擬的任何產品,您的應用程式和程式碼將與即時資源(資料庫執行個體、儲存桶、函數等)進行互動。 |
示範 | 示範 Firebase 專案沒有真正的Firebase 配置,也沒有即時資源。這些項目通常透過代碼實驗室或其他教程存取。 示範項目的項目 ID 具有 | 使用示範 Firebase 專案時,您的應用程式和程式碼僅與模擬器互動。如果您的應用程式嘗試與未運行模擬器的資源進行交互,則該程式碼將會失敗。 |
我們建議您盡可能使用演示項目。好處包括:
- 設定更簡單,因為您無需建立 Firebase 專案即可運行模擬器
- 更強的安全性,因為如果您的程式碼意外調用非模擬(生產)資源,則不會發生資料變更、使用和計費
- 更好的離線支持,因為無需訪問互聯網即可下載 SDK 配置。
檢測您的應用程式以與模擬器對話
Android、Apple 平台和 Web SDK
設定應用程式內配置或測試類別以與即時資料庫交互,如下所示。
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 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 modular API
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 namespaced API
var db = firebase.database(); if (location.hostname === "localhost") { // Point to the RTDB emulator running on localhost. db.useEmulator("127.0.0.1", 9000); }
使用模擬器測試由即時資料庫事件觸發的Cloud Functions 無需進行任何額外設定。當即時資料庫和 Cloud Functions 模擬器同時運作時,它們會自動協同運作。
管理 SDK
設定FIREBASE_DATABASE_EMULATOR_HOST
環境變數後,Firebase Admin SDK 會自動連接到即時資料庫模擬器:
export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"
如果您的程式碼在 Cloud Functions 模擬器內執行,您的專案 ID 和其他配置將在呼叫initializeApp
時自動設定。
如果您希望 Admin SDK 程式碼連接到在另一個環境中執行的共用模擬器,則需要指定使用 Firebase CLI 設定的相同專案 ID 。您可以直接將專案ID傳遞給initializeApp
或設定GCLOUD_PROJECT
環境變數。
Node.js 管理 SDK
admin.initializeApp({ projectId: "your-project-id" });
環境變數
export GCLOUD_PROJECT="your-project-id"
在測試之間清除資料庫
若要在活動之間刷新即時資料庫,您可以清除資料庫引用。您可以使用此方法作為簡單關閉模擬器進程的替代方法。
Kotlin+KTX
// 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 modular API
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 namespaced API
// 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
指令。有關更多信息,請參閱模擬器命令參考。
可視化安全規則活動
當您完成原型和測試循環時,您可以使用本機模擬器套件提供的視覺化工具和報告。
視覺化規則評估
當您將安全規則新增至原型時,您可以使用本機模擬器套件工具進行偵錯。
執行一組測試後,您可以存取測試覆蓋率報告,其中顯示每個規則的評估方式。若要取得報告,請在模擬器執行時查詢模擬器上公開的端點。對於瀏覽器友善的版本,請使用以下 URL:
http://localhost:9000/.inspect/coverage?ns=<database_name>
這會將您的規則分解為表達式和子表達式,您可以將滑鼠懸停在這些表達式和子表達式上以獲取更多信息,包括執行次數和返回的值。對於此資料的原始 JSON 版本,請在查詢中包含以下 URL:
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
接下來是什麼?
- 如需一組精選影片和詳細操作範例,請關注Firebase 模擬器訓練播放清單。
- 研究涉及安全規則測試和 Firebase 測試 SDK 的高級用例:測試安全規則(即時資料庫) 。
- 由於觸發函數是與即時資料庫的典型集成,因此請在本地運行函數以了解有關 Cloud Functions for Firebase 模擬器的更多資訊。