Firebase CLI 包含一个 Cloud Functions 模拟器,可以模拟以下函数类型:
- HTTPS 函数
- Callable 函数
- Cloud Firestore 函数
您可以在本地运行函数,以便在部署到生产环境之前对其进行测试。
安装 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"
与其他服务交互
模拟器套件包括多个模拟器,这些模拟器可以用来测试跨产品交互。
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 模拟器套件的完整示例,请参阅测试快速入门示例。