將應用程式連線至 Cloud Functions 模擬器

將應用程式連線至 Cloud Functions 模擬器之前,請確定 您瞭解整體 Firebase Local Emulator Suite 工作流程。 而且您需要安裝及設定 Local Emulator Suite 並查看其 CLI 指令

選擇 Firebase 專案

Firebase Local Emulator Suite 在單一 Firebase 專案中模擬產品。

如要選取要使用的專案,請先在 CLI 執行下列指令,再啟動模擬器 firebase use。您也可以 對每個模擬器使用 --project 標記 指令

Local Emulator Suite 支援模擬「實際」的 Firebase 專案和 demo 專案。

專案類型 功能 與模擬器搭配使用
真實

真正的 Firebase 專案是您建立及設定的專案 (很有可能 透過 Firebase 控制台進行)。

真實專案具備即時資源,例如資料庫執行個體、儲存空間 您為此 Firebase 設定的值區、函式或任何其他資源 專案。

使用實際的 Firebase 專案時 或所有支援的產品

如有任何產品並非由您模擬,應用程式和程式碼就會 會與 live 資源 (資料庫執行個體、儲存空間) 互動 值區、函式等)。

示範

示範 Firebase 專案沒有實際的 Firebase 設定, 沒有即時資源這類專案通常透過程式碼研究室或 其他教學課程

示範專案的專案 ID 含有前置字串 demo-

使用示範 Firebase 專案時,您的應用程式和程式碼會與 僅適用於模擬器。如果應用程式嘗試與資源互動 未執行模擬器時,該程式碼就會失敗。

建議您盡可能使用示範專案。Meet 具備以下優點:

  • 設定更簡單,因為您無須建立 Firebase 專案
  • 提升安全性,因為程式碼意外叫用非模擬 (實際工作環境) 資源,則任何資料都無法變更、用量和計費
  • 更完善的離線支援功能,因為不必上網也可以 下載 SDK 設定。
,瞭解如何調查及移除這項存取權。

檢測應用程式,以便與模擬器通訊

檢測應用程式以使用可呼叫函式

如果您的原型和測試活動涉及可呼叫的後端函式,請設定與 Cloud Functions for Firebase 模擬器的互動,如下所示:

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 functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 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);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web

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

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

Web

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

檢測應用程式的 HTTPS 函式模擬結果

程式碼中的每個 HTTPS 函式都會使用以下網址格式,透過本機模擬器提供:

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

例如,一個含有預設主機通訊埠和區域的簡易 helloWorld 函式會在下列位置提供:

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

檢測應用程式以執行工作佇列函式模擬

模擬器會根據觸發條件自動設定模擬的工作佇列 定義,而 Admin SDK 會將已加入佇列的要求重新轉送至模擬器, 它會透過 CLOUD_TASKS_EMULATOR_HOST 環境偵測是否正在運作 變數。

請注意,在正式環境中使用的調度系統比 因此,請不要預期 才能精確模擬生產環境當中的參數 模擬器提供調度工作的頻率上限 然後重試。

檢測應用程式以進行背景觸發函式模擬

Cloud Functions 模擬器支援下列來源的背景觸發函式:

  • Realtime Database 模擬器
  • Cloud Firestore 模擬器
  • Authentication 模擬器
  • Pub/Sub 模擬器
  • Firebase 快訊模擬器

如要觸發背景事件,請使用 Emulator Suite UI,或將應用程式或測試程式碼連線至模擬器。 導入適用於您平台的 SDK

測試擴充功能產生的自訂事件專用處理常式

針對為了處理 Firebase Extensions 自訂事件而實作的函式 搭配 Cloud Functions v2,Cloud Functions 模擬器會與 支援的 Eventarc 模擬器 Eventarc 觸發條件

如要針對發出事件的擴充功能測試自訂事件處理常式,您必須安裝 Cloud Functions 和 Eventarc 模擬器。

Cloud Functions 執行階段會設定 EVENTARC_EMULATOR 環境 將 Eventarc 模擬器設為 localhost:9299 正在運作。Firebase Admin SDK 會自動連線至 Eventarc 在已設定 EVENTARC_EMULATOR 環境變數的情況下模擬器。你可以 修改預設通訊埠,如設定 Local Emulator Suite 一節所述。

如果環境變數已正確設定,Firebase Admin SDK 自動將事件傳送至 Eventarc 模擬器。反之,Eventarc 模擬器會傳回呼叫 Cloud Functions 模擬器,以觸發任何 註冊處理常式

您可以在 Emulator Suite UI 中查看函式記錄,進一步瞭解 處理常式執行作業。

設定本機測試環境

如果您的函式仰賴以 dotenv 為基礎的 環境設定 並能在本機測試環境中模擬這項行為。

使用本機 Cloud Functions 模擬器時,您可以覆寫環境 設定 .env.local 檔案來建立專案的變數。內容 .env.local 的優先順序高於 .env 和專案專屬 .env 檔案。

舉例來說,專案可以包含這三個檔案 開發和本機測試的不同值:

.env .env.dev .env.local
PLANET=地球

AUDIENCE=人類

AUDIENCE=Dev Humans AUDIENCE=當地人

在本機環境中啟動時,模擬器會載入環境 變數,如下所示:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

Cloud Functions 模擬器中的密鑰和憑證

Cloud Functions 模擬器支援使用密鑰執行下列操作: 儲存及存取機密設定資訊。 根據預設,模擬器會嘗試使用 應用程式預設憑證。 模擬器在某些情況下 (例如 CI 環境) 可能會無法存取 存取所有 Secret 值。

與對環境變數的 Cloud Functions 模擬器支援類似,您可以 設定 .secret.local 檔案來覆寫密鑰值。如此一來 方便您在本機測試函式 (尤其是沒有存取權限的情況下) 設為密鑰值。

還有哪些其他用來測試「Cloud Functions」的工具?

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

  • Cloud Functions 殼層:允許互動式疊代函式 例如原型設計和開發殼層採用 Cloud Functions 模擬器,其中含有 適用於開發的 REPL 式介面。未與 提供 Cloud FirestoreRealtime Database 模擬器。使用殼層時 模擬資料並執行函式呼叫,藉此模擬與 Local Emulator Suite目前不支援 Analytics、 遠端設定和 Crashlytics。
  • Cloud Functions 專用 Firebase Test SDK,是採用 mocha 架構的 Node.js 協助您開發函式事實上,Cloud Functions Test SDK 提供 Cloud Functions 殼層頂端的自動化動作

您可以進一步瞭解 Cloud Functions 殼層和 Cloud Functions Test SDK 在互動式測試函式Cloud Functions 的單元測試

Cloud Functions 模擬器與實際工作環境的差異

Cloud Functions 模擬器非常接近實際工作環境 大多數用途我們竭盡所能確保一切 會盡可能接近實際工作環境不過, 模擬器不會模擬完整容器化實際工作環境 因此,儘管函式程式碼能夠實際執行 環境 (即本機檔案、函式停止運作後的行為等) 不同之處

Cloud IAM

Firebase 模擬器套件不會試圖複製或尊重任何 與執行作業的 IAM 相關行為。模擬器符合 Firebase 安全性規定 已提供規則,但在一般情況下會使用 IAM,例如 設定 Cloud Functions 叫用服務帳戶,藉此取得權限 無法設定模擬器,且會使用全域存取的帳戶 與直接執行本機指令碼類似

記憶體和處理器限制

模擬器不會針對您的 函式。不過,模擬器支援透過 timeoutSeconds 執行階段引數。

請注意,如果函式中的函式符合下列條件,函式的執行時間可能與實際工作環境不同 透過模擬器執行建議您在設計和測試完成後 功能,您可以在正式版環境中執行有限測試 執行時間。

規劃本機與實際工作環境的差異

由於模擬器是在本機電腦上執行,因此取決於本機 部署應用程式及內建程式和公用程式。

請注意,Cloud Functions 開發環境的本機環境可能會 與 Google 實際工作環境不同:

  • 安裝在本機的應用程式,用來模擬實際工作環境 (例如 本教學課程中的 ImageMagick 可能與實際工作環境的行為不同 或在非 Linux 環境中開發建議您自行部署 缺少程式的二進位檔副本和函式部署。

  • 同樣地,內建公用程式 (例如 lsmkdir 等殼層指令) 可能會 和實際工作環境中的版本有所不同 非 Linux 環境 (例如 macOS)。您可以透過以下方法處理這個問題: 以節點為唯一替代方案取代原生指令,或建構 Linux 二進位檔 與部署作業

重試中

Cloud Functions 模擬器不支援在失敗時重試函式。

接下來呢?