获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

在本地运行函数

Firebase CLI 包含一个 Cloud Functions 模拟器,它可以模拟以下函数类型:

  • HTTPS 功能
  • 可调用函数
  • 从 Firebase 身份验证、实时数据库、Cloud Firestore、Cloud Storage 和 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或更高版本。

设置管理员凭据(可选)

如果您希望您的函数测试通过Firebase Admin SDK与 Google API 或其他 Firebase API 交互,您可能需要设置管理员凭据。

  • Cloud Firestore 和实时数据库触发器已经有足够的凭据,不需要额外设置。
  • 所有其他 API,包括 Firebase API(例如身份验证和 FCM)或 Google API(例如 Cloud Translation 或 Cloud Speech)都需要本节中描述的设置步骤。无论您使用的是 Cloud Functions shell 还是firebase emulators:start ,这都适用。

要为模拟函数设置管理员凭据:

  1. 打开 Google Cloud Console 的服务帐户窗格
  2. 确保选择App Engine 默认服务帐户,并使用右侧的选项菜单选择Create key
  3. 出现提示时,选择JSON作为密钥类型,然后单击Create
  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
    

完成这些步骤后,您的函数测试可以使用Admin SDK访问 Firebase 和 Google API。例如,在测试身份验证触发器时,模拟函数可以调用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

运行模拟器套件

要运行 Cloud Functions 模拟器,请使用emulators:start命令:

firebase emulators:start

emulators:start命令将根据您在本地项目中使用firebase init初始化的产品启动 Cloud Functions、Cloud Firestore、实时数据库和 Firebase 托管的模拟器。如果要启动特定的模拟器,请使用--only标志:

firebase emulators:start --only functions

如果要在模拟器启动后运行测试套件或测试脚本,请使用emulators:exec命令:

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

检测您的应用程序以与模拟器对话

要检测您的应用程序以与模拟器交互,您可能需要进行一些额外的配置。

为您的应用程序检测可调用函数

如果您的原型和测试活动涉及可调用的后端函数,请配置与 Cloud Functions for Firebase 模拟器的交互,如下所示:

安卓
// 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")

Web version 9

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

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

Web version 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 模拟器
  • 身份验证模拟器
  • 发布/订阅模拟器

要触发后台事件,请使用 Emulator Suite UI 修改后端资源,或者使用适用于您平台的 SDK 将您的应用程序或测试代码连接到模拟器。

扩展程序发出的自定义事件的测试处理程序

对于使用 Cloud Functions v2 处理 Firebase Extensions 自定义事件而实施的函数,Cloud Functions 模拟器与 Eventarc 模拟器配对以支持Eventarc 触发器

要为发出事件的扩展测试自定义事件处理程序,您必须安装 Cloud Functions 和 Eventarc 模拟器。

如果 Eventarc 模拟器正在运行,Cloud Functions 运行时会将当前进程中的EVENTARC_EMULATOR环境变量设置为localhost:9299 。设置EVENTARC_EMULATOR环境变量后,Firebase Admin SDK 会自动连接到 Eventarc 模拟器。您可以修改默认端口,如配置本地仿真器套件中所述。

正确配置环境变量后,Firebase Admin SDK 会自动将事件发送到 Eventarc 模拟器。反过来,Eventarc 模拟器会回调 Cloud Functions 模拟器以触发任何已注册的处理程序。

您可以在 Emulator Suite UI 中查看函数日志以获取有关处理程序执行的详细信息。

与其他服务的交互

模拟器套件包括多个模拟器,可以测试跨产品交互。

云防火墙

如果您有使用 Firebase Admin SDK 写入 Cloud Firestore 的函数,这些写入将被发送到正在运行的 Cloud Firestore 模拟器。如果这些写入触发了更多函数,它们将在 Cloud Functions 模拟器中运行。

云储存

如果您有使用 Firebase Admin SDK(版本 9.7.0 或更高版本)写入 Cloud Storage 的函数,则这些写入将被发送到正在运行的 Cloud Storage 模拟器。如果这些写入触发了更多函数,它们将在 Cloud Functions 模拟器中运行。

Firebase 身份验证

如果您有使用 Firebase Admin SDK(版本 9.3.0 或更高版本)写入 Firebase 身份验证的函数,则这些写入将被发送到正在运行的 Auth 模拟器。如果这些写入触发了更多函数,它们将在 Cloud Functions 模拟器中运行。

Firebase 托管

如果您使用 Cloud Functions为 Firebase 托管生成动态内容,则firebase emulators:start使用您的本地 HTTP 函数作为托管代理。

日志记录

模拟器将日志从您的函数流式传输到它们运行的​​终端窗口。它在函数中显示来自console.log()console.info()console.error()console.warn()语句的所有输出。

下一步

有关使用 Firebase 模拟器套件的完整示例,请参阅测试快速入门示例