Firebase Data Connect 为您提供了一个本地模拟器,可用于端到端原型设计以及持续集成和持续部署 (CI/CD) 流程:
- Data Connect 模拟器可与本地集成的 PGLite 数据库实例交互,以便您在完全本地的环境中对查询和更改进行原型设计,并测试客户端代码。
- Data Connect 模拟器还可用于非交互式工作。借助该工具,您可以运行自动化测试,并将其与 CI/CD 工作流搭配使用。如果架构稳定且您想对客户端代码进行原型设计和测试,这会非常有用。
与快速入门相比,本指南更详细地介绍了如何安装和使用模拟器。
安装 Data Connect 模拟器
在安装 Local Emulator Suite 以使用 Data Connect 模拟器之前,您需要满足以下条件:
- Node.js 18.0 或更高版本。
安装 Firebase CLI 并设置项目目录
按照安装指南安装 Firebase CLI。请务必定期更新,因为 Data Connect 模拟器正在积极开发中,会添加 bug 修复和新功能。
如果您尚未将当前工作目录初始化为 Firebase 项目,请按照提示指定要使用的产品:
firebase init
设置或修改 Local Emulator Suite 配置
如果您通过 Firebase VS Code 扩展程序启动了 Data Connect 模拟器,系统会根据需要为您安装模拟器。
您可以使用 Firebase CLI 手动安装模拟器以及 Local Emulator Suite 的其他所选组件。此命令会启动配置向导,让您选择所需的模拟器,下载相应的模拟器二进制文件,以及在默认设置不合适时设置模拟器端口。
firebase init emulators
安装模拟器后,系统将不会执行更新检查,并且在您更新 Firebase CLI 版本之前不会自动进行额外的下载。
选择一个 Firebase 项目
在设置流程中,Firebase CLI 会提示您选择或创建 Firebase 项目。如果您选择在 Firebase 控制台中使用 Data Connect 设置的现有项目,系统会建议您选择在该控制台中选择的配置。
设置模拟器
配置模拟器
运行 firebase init
流程将引导您完成模拟器设置选项。与 Local Emulator Suite 中的其他模拟器一样,配置参数存储在本地项目文件中。
firebase.json
文件包含模拟器端口分配。emulators:ui
键不适用于 Data Connect 模拟器。
使用本地和生产 Data Connect 资源
如果您想确保不会影响生产资源,请设置 demo-
projectID,或确保您的客户端代码已插桩以连接到模拟器,如后面部分所述。
启动模拟器
如果您要以非交互方式运行模拟器(例如,在 CI/CD 工作流中),请使用 exec
选项启动模拟器。
firebase emulators:exec ./path/to/test-script.sh
如果您要在客户端代码中集成预定义查询和更改,并且专门使用模拟器来测试客户端,则可以使用 start
选项进行交互式工作。您还可以通过 VS Code 扩展程序启动模拟器。
firebase emulators:start
对客户端代码进行插桩以与模拟器通信
按照以下步骤设置您的应用内配置或测试类,以便与 Data Connect 模拟器进行交互。
JavaScript
import { initializeApp } from "firebase/app"; import { connectorConfig } from "@name-of-package"; import { connectDataConnectEmulator, getDataConnect } from 'firebase/data-connect'; // TODO: Replace the following with your app's Firebase project configuration const firebaseConfig = { //... }; const app = initializeApp(firebaseConfig); const dataConnect = getDataConnect(app, connectorConfig); connectDataConnectEmulator(dataConnect, "localhost", 9399); // Make calls from your app
Kotlin Android
val connector = MoviesConnector.instance // Connect to the emulator on "10.0.2.2:9399" connector.dataConnect.useEmulator() // (Alternatively) if you're running your emulator on non-default port: connector.dataConnect.useEmulator(port = 9999) // Make calls from your app
iOS
let connector = DataConnect.dataConnect(DefaultConnectorClient.connectorConfig) // Connect to the emulator on "127.0.0.1:9399" connector.useEmulator() // (alternatively) if you're running your emulator on non-default port: connector.useEmulator(port: 9999) // Make calls from your app
使用模拟器进行测试和持续集成
运行容器化 Local Emulator Suite 映像
在典型的 CI 设置中,安装和配置包含容器的 Local Emulator Suite 非常简单。
您需要注意以下几个问题:
- 模拟器二进制文件安装并缓存在
~/.cache/firebase/emulators/
。您可能需要将此路径添加到 CI 缓存配置,以免重复下载。 - 如果您的代码库中没有
firebase.json
文件,则必须向emulators:start
或emulators:exec
命令添加命令行参数,以指定应启动的模拟器。例如--only dataconnect
。
在多轮测试之间清空数据库
如需在运行之间重置测试环境,Firebase 建议:
- 编写专用更改以处理以下情况:
- 在设置过程中,使用起始数据填充本地数据库实例。
- 在拆解过程中,从测试后数据库实例中删除修改后的数据。
Data Connect 模拟器与生产环境的区别
Data Connect 模拟器可以模拟服务器端产品的许多功能。不过,也有一些例外情况需要注意:
- PGLite 的版本和详细配置可能与您的生产 Cloud SQL 实例的版本不同。
- 如果您使用模拟器通过 Data Connect 的 pgvector 和 Vertex API 集成进行开发,则会直接调用 Cloud Vertex API,而不是通过 Cloud SQL 的 Vertex 集成进行调用。不过,系统仍会调用正式版 API,这意味着您必须使用真实的 Firebase 项目(不能使用
demo-
项目),并且需要承担 Vertex API 的费用。