Firebase CLI 包含一个 Cloud Functions 模拟器,可以模拟以下函数类型:
- HTTPS 函数
- Callable 函数
- 从 Authentication、Realtime Database、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
版或更高版本。
设置管理员凭据(可选)
如果您希望自己的函数测试通过 Firebase Admin SDK 与 Google API 或其他 Firebase API 进行交互,则可能需要设置管理员凭据。
- Cloud Firestore 和实时数据库触发器已经有足够的凭据,不需要进行额外的设置。
- 所有其他 API(包括身份验证和 FCM 等 Firebase API,或 Cloud Translation 和 Cloud Speech 等 Google API)都需要执行本部分中介绍的设置步骤。无论您使用的是函数 shell 还是
firebase emulators:start
,都需要遵循此要求。
为所模拟的函数设置管理员凭据:
- 在 Google Cloud Console 中打开“服务帐号”窗格。
- 确保已选择 App Engine 默认服务帐号,并使用右侧的选项菜单选择创建密钥。
- 出现提示时,选择 JSON 作为密钥类型,然后点击创建。
将您的 Google 默认凭据设置为指向已下载的密钥:
Unix
$ export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" $ firebase emulators:start
Windows
$ 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
firebase functions:shell
运行模拟器套件
要运行 Cloud Functions 模拟器,请使用 emulators:start
命令:
firebase emulators:start
根据您使用 firebase init
在本地项目中已初始化的产品,emulators:start
命令将启动用于 Cloud Functions、Cloud Firestore、实时数据库和 Firebase 托管等产品的模拟器。如果要启动特定的模拟器,请使用 --only
标志:
firebase emulators:start --only functions
如果要在模拟器启动后运行测试套件或测试脚本,请使用 emulators:exec
命令:
firebase emulators:exec "./my-test.sh"
对您的应用进行插桩处理以与模拟器通信
要对您的应用进行插桩处理以与模拟器交互,您可能需要进行一些其他配置。
针对 Callable 函数对您的应用进行插桩处理
如果您的原型设计和测试活动涉及 Callable 后端函数,请按如下方式配置与 Cloud Functions for Firebase 模拟器的交互:
Android
// 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 - Swift
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")
Web
firebase.functions().useEmulator("localhost", 5001);
针对 HTTPS 函数模拟对您的应用进行插桩处理
代码中的每个 HTTPS 函数都将从本地模拟器按以下网址格式提供:
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
例如,采用默认主机端口和区域的简单 helloWorld
函数将在以下位置提供:
https://localhost:5001/$PROJECT/us-central1/helloWorld
针对后台触发的函数模拟对您的应用进行插桩处理
Cloud Functions 模拟器支持以下来源的后台触发函数:
- Realtime Database 模拟器
- Cloud Firestore 模拟器
- Authentication 模拟器
- Pub/Sub 模拟器
要触发后台事件,请使用适用于您的平台的 SDK 将应用或测试代码连接到模拟器。
与其他服务交互
模拟器套件包括多个模拟器,这些模拟器可以用来测试跨产品交互。
Cloud Firestore
如果您有一些使用 Firebase Admin SDK 将数据写入到 Cloud Firestore 的 Cloud Functions 函数,则这些写入操作将在 Cloud Firestore 模拟器运行时发送到该模拟器。如果这些写入操作触发了其他 Cloud Functions 函数,则这些函数将在 Cloud Functions 模拟器中运行。
Firebase Hosting
如果您使用 Cloud Functions 为 Firebase 托管生成动态内容,则 firebase emulators:start
会将您的本地 HTTP 函数作为托管代理。
日志记录
模拟器会将日志从您的函数流式传输到运行这些函数的终端窗口。它会显示您的函数内的 console.log()
、console.info()
、console.error()
和 console.warn()
语句的所有输出内容。
后续步骤
如需查看使用 Firebase 模拟器套件的完整示例,请参阅测试快速入门示例。