获取我们在 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,包括身份验证和 FCM 等 Firebase API 或 Cloud Translation 或 Cloud Speech 等 Google API,都需要本节中描述的设置步骤。无论您使用的是 Cloud Functions shell 还是firebase emulators:start ,这都适用。

为模拟功能设置管理员凭据:

  1. 打开 Google Cloud Console 的服务帐户窗格
  2. 确保选择了App Engine 默认服务帐户,并使用右侧的选项菜单选择Create key
  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
    

完成这些步骤后,您的功能测试可以使用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、Realtime Database 和 Firebase Hosting 的模拟器。如果要启动特定的模拟器,请使用--only标志:

firebase emulators:start --only functions

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

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

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

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

检测您的应用程序以获取可调用函数

如果您的原型和测试活动涉及可调用的后端函数,请像这样配置与 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);
迅速
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 模拟器。您可以按照Configure Local Emulator Suite中的讨论修改默认端口。

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

您可以在 Emulator Suite UI 中查看 Functions 日志,了解有关处理程序执行的详细信息。

与其他服务的交互

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

云端 Firestore

如果您有使用 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 Authentication 的函数,这些写入将被发送到 Auth 模拟器(如果它正在运行)。如果这些写入触发了更多功能,它们将在 Cloud Functions 模拟器中运行。

火力地堡托管

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

记录

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

下一步

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