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 的费用。