Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

在本地運行函數

Firebase CLI 包含一個 Cloud Functions 模擬器,它可以模擬以下函數類型:

  • HTTPS 功能
  • 可調用函數
  • 從身份驗證、實時數據庫、Cloud Firestore 和 Cloud Pub/Sub 觸發的後台函數。

您可以在本地運行函數以在部署到生產之前對其進行測試。

安裝 Firebase CLI

要使用 Cloud Functions 模擬器,請先安裝 Firebase CLI:

npm install -g firebase-tools

為了使用本地模擬器,您的 Cloud Functions 必須依賴於:

  • firebase-admin版本8.0.0或更高版本。
  • firebase-functions版本3.0.0或更高版本。

設置管理員憑據(可選)

如果你希望你的功能測試,通過與谷歌的API或其他火力地堡的API互動火力地堡管理員SDK ,您可能需要設置管理員憑據。

  • 雲和的FireStore實時數據庫觸發器已經有足夠的憑據,並且不需要額外的設置。
  • 所有其他 API,包括 Firebase API(例如 Authentication 和 FCM)或 Google API(例如 Cloud Translation 或 Cloud Speech)都需要本部分中描述的設置步驟。這適用無論你正在使用的功能殼或firebase emulators:start

要為模擬功能設置管理員憑據:

  1. 打開服務帳戶窗格中的谷歌雲控制台。
  2. 確保App Engine的默認服務帳戶被選中,並使用選項菜單右側選擇創建關鍵
  3. 提示時,選擇JSON的密鑰類型,然後單擊創建
  4. 將您的 Google 默認憑據設置為指向下載的密鑰:

    Unix

    $ export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    
    $ firebase emulators:start
    

    視窗

    $ set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    
    $ firebase emulators:start
    

完成這些步驟後,你的功能測試可以訪問使用火力地堡和谷歌的API管理SDK 。例如,在測試的認證觸發時,仿真功能可以調用admin.auth().getUserByEmail(email)

設置功能配置(可選)

如果您使用自定義的功能配置變量,首先運行命令,讓您的自定義配置(在中運行此functions目錄)在本地環境:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

運行模擬器套件

要運行雲功能仿真器,使用emulators:start命令:

firebase emulators:start

emulators:start命令將啟動模擬器雲功能,雲計算公司的FireStore,實時數據庫,火力地堡託管根據您在使用本地項目初始化產品firebase init 。如果你想啟動一個特定的仿真器,使用--only標誌:

firebase emulators:start --only functions

如果你想運行模擬器後一個測試套件或測試腳本已經開始,使用emulators:exec命令:

firebase emulators:exec "./my-test.sh"

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

要檢測您的應用程序以與模擬器交互,您可能需要進行一些額外的配置。

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

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

安卓
        // 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);
iOS - 斯威夫特
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 將您的應用程序或測試代碼連接到模擬器。

與其他服務的交互

模擬器套件包括多個模擬器,可用於測試跨產品交互。

雲防火牆

如果您有使用 Firebase Admin SDK 寫入 Cloud Firestore 的 Cloud Functions,這些寫入將發送到 Cloud Firestore 模擬器(如果它正在運行)。如果這些寫入觸發了更多 Clo​​ud Functions,它們將在 Cloud Functions 模擬器中運行。

Firebase 託管

如果你使用雲功能來生成火力地堡託管動態內容firebase emulators:start使用當地的HTTP作為代理託管。

日誌記錄

模擬器將日誌從您的函數流式傳輸到它們運行的終端窗口。它顯示所有輸出console.log() console.info() console.error()console.warn()語句的函數中。

下一步

對於使用火力地堡仿真器套件的一個完整的例子,請參見測試快速啟動示例