在開始使用 Firebase 本地模擬器套件之前,請確保您已創建 Firebase 項目、設置開發環境,並根據適合您平台的 Firebase 入門主題選擇並安裝適合您平台的 Firebase SDK: Apple 、 Android或網絡。
原型和測試
本地模擬器套件包含多個產品模擬器,如Firebase 本地模擬器套件簡介中所述。您可以根據您在生產中使用的 Firebase 產品,根據您認為合適的情況,使用單個模擬器以及模擬器組合進行原型設計和測試。

對於本主題,為了介紹本地模擬器套件工作流程,我們假設您正在開發一個使用典型產品組合的應用程序:Firebase 數據庫和由該數據庫上的操作觸發的雲函數。
在本地初始化 Firebase 項目後,使用本地模擬器套件的開發週期通常包含三個步驟:
原型具有與仿真器和仿真器套件 UI 交互的功能。
如果您使用的是數據庫模擬器或 Cloud Functions 模擬器,請執行一次性步驟將您的應用連接到模擬器。
使用模擬器和自定義腳本自動化您的測試。
本地初始化 Firebase 項目
curl -sL firebase.tools | bash
如果您尚未執行此操作,請將當前工作目錄初始化為 Firebase 項目,按照屏幕上的提示指定您正在使用Cloud Functions以及Cloud Firestore或Realtime Database :
firebase init
您的項目目錄現在將包含 Firebase 配置文件、數據庫的 Firebase 安全規則定義文件、包含雲函數代碼functions
目錄以及其他支持文件。
交互式原型
本地仿真器套件旨在讓您快速構建新功能的原型,該套件的內置用戶界面是其最有用的原型設計工具之一。這有點像在本地運行 Firebase 控制台。
使用模擬器套件 UI,您可以迭代數據庫的設計、嘗試涉及雲功能的不同數據流、評估安全規則更改、檢查日誌以確認後端服務的執行情況等等。然後,如果您想重新開始,只需清除數據庫並以新的設計理念重新開始即可。
當您使用以下命令啟動本地模擬器套件時,所有這些都可用:
firebase emulators:start
為了對我們假設的應用程序進行原型設計,讓我們設置並測試一個基本的雲函數來修改數據庫中的文本條目,並在模擬器套件 UI 中創建並填充該數據庫以觸發它。
- 通過編輯項目目錄中的
functions/index.js
文件來創建由數據庫寫入觸發的雲函數。將現有文件的內容替換為以下代碼片段。此函數偵聽messages
集合中文檔的更改,將文檔original
字段的內容轉換為大寫,並將結果存儲在該文檔的uppercase
字段中。 - 使用
firebase emulators:start
啟動本地模擬器套件。 Cloud Functions 和數據庫模擬器啟動,自動配置為互操作。 - 在瀏覽器中查看 UI
http://localhost:4000
。端口 4000 是 UI 的默認端口,但請檢查 Firebase CLI 輸出的終端消息。請注意可用模擬器的狀態。在我們的示例中,Cloud Functions 和 Cloud Firestore 模擬器將運行。 - 在 UI 中的Firestore > 數據選項卡上,單擊開始收集並按照提示在
messages
集合中創建一個新文檔,其中字段名為original
,值為test
。這會觸發我們的雲功能。您會發現很快就會出現一個新的uppercase
字段,其中填充了字符串“TEST”。 - 在Firestore > 請求選項卡上,檢查向模擬數據庫發出的請求,包括為滿足這些請求而執行的所有 Firebase 安全規則評估。
- 檢查“日誌”選項卡以確認您的函數在更新數據庫時沒有遇到錯誤。
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}); });
您可以輕鬆地在雲函數代碼和交互式數據庫編輯之間進行迭代,直到獲得所需的數據流,而無需觸及應用程序內數據庫訪問代碼、重新編譯和重新運行測試套件。
將您的應用程序連接到模擬器
當您在交互式原型設計方面取得了良好進展並確定了設計後,您就可以使用適當的 SDK 將數據庫訪問代碼添加到您的應用程序中。您將繼續使用模擬器套件 UI 中的數據庫選項卡和日誌選項卡(對於功能)來確認您的應用程序的行為是否正確。
請記住,本地模擬器套件是本地開發工具。寫入生產數據庫不會觸發您在本地進行原型設計的函數。
要切換到讓您的應用寫入數據庫,您需要將測試類或應用內配置指向 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.isPersistenceEnabled = false 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"
更深入地探索各個模擬器
現在您已經了解了基本的客戶端工作流程,您可以繼續了解套件中各個模擬器的詳細信息,包括如何將它們用於服務器端應用程序開發:
- 將身份驗證模擬器添加到您的原型設計工作流程中
- 深入了解實時數據庫模擬器功能
- 深入了解 Cloud Storage for Firebase 模擬器功能
- 深入了解 Cloud Firestore 模擬器功能
- 將您的應用程序連接到 Cloud Functions 模擬器
- 使用 Extensions 模擬器評估 Firebase Extensions,同時最大限度地降低計費成本
接下來是什麼?
請務必閱讀上面鏈接的與特定模擬器相關的主題。然後:
- 如需一組精選視頻和詳細操作示例,請關注Firebase 模擬器培訓播放列表。
- 研究涉及安全規則測試和 Firebase 測試 SDK 的高級用例:測試安全規則 (Cloud Firestore) 、測試安全規則 (實時數據庫)和測試安全規則 (Cloud Storage for Firebase) 。