Catch up on everthing we announced at this year's Firebase Summit. Learn more

將您的應用程序連接到 Cloud Functions 模擬器

您的應用程序連接到雲功能仿真器之前,請確保你理解了全部火力地堡本地模擬器套房的工作流程,以及您安裝並配置本地仿真器套件和審查其CLI命令

選擇一個 Firebase 項目

Firebase 本地模擬器套件模擬單個 Firebase 項目的產品。

要選擇項目中使用,啟動模擬器前,在命令行運行firebase use在你的工作目錄。或者,您可以通過--project標誌給每個仿真命令。

當地仿真器套件支持實時火力地堡項目和示範項目的仿真。

項目類型特徵與模擬器一起使用
真實的

一個真正的 Firebase 項目是您創建和配置的(很可能通過 Firebase 控制台)。

真實項目具有實時資源,例如數據庫實例、存儲桶、函數或您為該 Firebase 項目設置的任何其他資源。

在處理真實的 Firebase 項目時,您可以為任何或所有受支持的產品運行模擬器。

因為你不模仿任何產品,您的應用程序和代碼將用資源(數據庫實例,存儲鬥,功能等)進行交互。

演示

一個演示火力地堡項目有沒有真正的火力地堡配置和沒有活的資源。這些項目通常通過代碼實驗室或其他教程訪問。

項目編號為示範項目有demo-前綴。

當演示火力地堡的項目,你的應用程序和用仿真器代碼交互工作。如果您的應用嘗試與模擬器未運行的資源進行交互,則該代碼將失敗。

我們建議您盡可能使用演示項目。好處包括:

  • 設置更簡單,因為您無需創建 Firebase 項目即可運行模擬器
  • 更強的安全性,因為如果您的代碼不小心調用了非模擬(生產)資源,則不會發生數據更改、使用和計費
  • 更好的離線支持,因為無需訪問互聯網即可下載您的 SDK 配置。

檢測您的應用程序以與模擬器對話

為您的應用檢測可調用函數

如果您的原型和試驗活動,包括調用後台功能,與火力地堡模擬器這樣的雲功能配置的互動:

安卓
        // 10.0.2.2 is the special IP address to connect to the 'localhost' of
        // the host computer from an Android emulator.
        FirebaseFunctions functions = FirebaseFunctions.getInstance();
        functions.useEmulator("10.0.2.2", 5001);
迅速
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")

網頁版 9

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "localhost", 5001);

網頁版 8

firebase.functions().useEmulator("localhost", 5001);

為您的應用程序檢測 HTTPS 功能模擬

代碼中的每個 HTTPS 函數都將使用以下 URL 格式從本地模擬器提供:

http:// $HOST : $PORT / $PROJECT / $REGION / $NAME

例如一個簡單helloWorld使用默認的主機端口和區域功能將在提供服務:

https://localhost:5001/ $PROJECT /us-central1/helloWorld

為您的應用程序檢測後台觸發的功能仿真

Cloud Functions 模擬器支持來自以下來源的後台觸發函數:

  • 實時數據庫模擬器
  • Cloud Firestore 模擬器
  • 身份驗證模擬器
  • 發布/訂閱模擬器

要觸發後台事件,請使用適用於您平台的 SDK 將您的應用程序或測試代碼連接到模擬器。

還有哪些其他用於測試 Cloud Functions 的工具?

Cloud Functions 模擬器由其他原型和測試工具補充:

  • Cloud Functions shell,允許交互式、迭代函數原型設計和開發。 Shell 使用 Cloud Functions 模擬器和 REPL 風格的接口進行開發。未提供與 Cloud Firestore 或實時數據庫模擬器的集成。使用 shell,您可以模擬數據並執行函數調用以模擬與 Local Emulator Suite 當前不支持的產品的交互:Cloud Storage、Pub/Sub、Analytics、Remote Config、Storage、Auth 和 Crashlytics。
  • 適用於 Cloud Functions 的 Firebase 測試 SDK,一個帶有用於函數開發的 mocha 框架的 Node.js。實際上,Cloud Functions 測試 SDK 在 Cloud Functions shell 之上提供了自動化。

你可以找到更多關於雲計算功能的外殼及雲功能測試SDK在測試功能交互雲功能的單元測試

Cloud Functions 模擬器與生產環境有何不同

對於大多數用例,Cloud Functions 模擬器非常接近生產環境。我們已投入大量工作以確保 Node 運行時中的所有內容都盡可能接近生產環境。但是,模擬器不會模擬完整的容器化生產環境,因此雖然您的函數代碼將實際執行,但您環境的其他方面(即本地文件、函數崩潰後的行為等)會有所不同。

雲端 IAM

Firebase 模擬器套件不會嘗試複製或尊重任何與 IAM 相關的運行行為。模擬器遵守提供的 Firebase 安全規則,但在通常使用 IAM 的情況下,例如設置調用服務帳戶的 Cloud Functions 並因此設置權限,模擬器不可配置,將使用開發者機器上的全局可用帳戶,類似於直接運行本地腳本。

內存和處理器限制

模擬器不會對您的函數強制執行內存或處理器限制。然而,仿真器不支持超時經由功能timeoutSeconds運行時參數。

請注意,當函數在模擬器中運行時,函數執行時間可能與生產不同。我們建議您在使用模擬器設計和測試功能後,在生產中運行有限的測試以確認執行時間。

規劃本地和生產環境的差異

由於模擬器在您的本地機器上運行,因此它取決於您的應用程序和內置程序和實用程序的本地環境。

請注意,您用於函數開發的本地環境可能與 Google 生產環境不同:

  • 您可以在本地安裝應用程序,以模擬生產環境(如ImageMagick的從本教程)從生產行為可能會有所不同,特別是如果你需要一個不同的版本或在非Linux環境開發。考慮在您的函數部署的同時部署您自己的缺失程序的二進制副本。

  • 同樣,內置的實用工具(例如,像shell命令lsmkdir )可從生產可用的版本有所不同,特別是如果你在一個非Linux開發環境(例如,Mac系統)。您可以通過使用 Node-only 替代本機命令或構建 Linux 二進製文件與您的部署捆綁來處理此問題。

重試

Cloud Functions 模擬器不支持在失敗時重試函數。

接下來是什麼?