Usar o emulador do Data Connect para CI/CD

O Firebase Data Connect oferece um emulador local para prototipagem de ponta a ponta, além de fluxos de integração e implantação contínuas (CI/CD):

  • O emulador Data Connect interage com uma instância local integrada do banco de dados PGLite para permitir que você crie protótipos de consultas e mutações e teste o código do cliente em um ambiente totalmente local.
  • O emulador Data Connect também pode ser usado para trabalhos não interativos. Ele permite executar testes automatizados e é adequado para uso com fluxos de trabalho de CI/CD. Isso é útil quando seus esquemas estão estáveis e você quer criar protótipos e testar o código do lado do cliente.

Este guia aborda a instalação e o uso do emulador com mais detalhes do que o guia de início rápido.

Instalar o emulador Data Connect

Antes de instalar o Local Emulator Suite para usar o emulador Data Connect, você vai precisar do seguinte:

  • Node.js versão 18.0 ou mais recente.

Instalar a CLI Firebase e configurar o diretório do projeto

, pule esta seção.
  1. Instale a CLI Firebase seguindo o guia de instalação. Atualize regularmente, já que o emulador Data Connect está em desenvolvimento ativo com correções de bugs e novos recursos.

  2. Se você ainda não tiver feito isso, inicialize o diretório de trabalho atual como um projeto do Firebase, seguindo as instruções para especificar quais produtos usar:

    firebase init

Definir ou modificar a configuração de Local Emulator Suite

Se você iniciou o emulador Data Connect na extensão do Firebase para VS Code, ele foi instalado para você, se necessário.

É possível usar a CLI Firebase para instalar manualmente o emulador com outros componentes selecionados do Local Emulator Suite. Esse comando inicia um assistente de configuração que permite selecionar emuladores do seu interesse, fazer o download dos arquivos binários do emulador correspondentes e definir as portas do emulador se os padrões não forem adequados.

  firebase init emulators

Depois que um emulador for instalado, nenhuma verificação de atualização será realizada e nenhum download automático adicional ocorrerá até que você atualize a versão da CLI Firebase.

Escolher um projeto do Firebase

No fluxo de configuração, a CLI Firebase pede que você escolha ou crie um projeto do Firebase. Se você escolher um projeto configurado com Data Connect no console do Firebase, a configuração escolhida será sugerida.

Configurar o emulador

Configurar o emulador

Executar o fluxo firebase init vai orientar você pelas opções de configuração do emulador. Assim como outros emuladores no Local Emulator Suite, os parâmetros de configuração são armazenados em arquivos de projeto locais.

  • O arquivo firebase.json contém atribuições de porta do emulador.
    • A chave emulators:ui não se aplica ao emulador Data Connect.

Trabalhar com recursos Data Connect locais e de produção

Se você quiser ter certeza de não afetar os recursos de produção, defina um demo- projectID ou verifique se o código do cliente está instrumentado para se conectar ao emulador, conforme discutido em uma seção posterior.

Iniciar o emulador

Se você estiver executando o emulador de forma não interativa, por exemplo, para fluxos de trabalho de CI/CD, inicie-o com a opção exec.

firebase emulators:exec ./path/to/test-script.sh

Se você estiver integrando consultas e mutações predefinidas no código do cliente e usando o emulador especificamente para testar clientes, use a opção start para trabalho interativo. Também é possível iniciar o emulador na extensão do VS Code.

firebase emulators:start

Instrumentar o código do cliente para se comunicar com o emulador

Defina a configuração no app ou as classes de teste para interagir com o emulador do Data Connect conforme mostrado a seguir.

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
  

Usar o emulador para testes e integração contínua

Executar imagens Local Emulator Suite em contêineres

É simples instalar e configurar o Local Emulator Suite com contêineres em uma configuração de CI típica.

Fique atento a alguns problemas:

  • Os binários do emulador são instalados e armazenados em cache em ~/.cache/firebase/emulators/. Adicione esse caminho à configuração do cache de CI para evitar downloads repetidos.
  • Se você não tiver um arquivo firebase.json no seu repositório, adicione um argumento de linha de comando ao comando emulators:start ou emulators:exec para especificar quais emuladores devem ser iniciados. Por exemplo, --only dataconnect.

Limpar o banco de dados entre os testes

Para redefinir os ambientes de teste entre execuções, o Firebase recomenda:

  • Como escrever mutações dedicadas para processar o seguinte:
    • Na configuração, preencha uma instância de banco de dados local com dados iniciais.
    • Na desmontagem, exclua os dados modificados da instância do banco de dados pós-teste.

Qual é a diferença entre o emulador do Data Connect e a produção?

O emulador do Data Connect simula muitos recursos do produto do lado do servidor. No entanto, há algumas exceções:

  • A versão e a configuração detalhada do PGLite podem ser diferentes da versão da instância de produção do Cloud SQL.
  • Se você estiver usando o emulador para desenvolver com a integração do pgvector e da API Vertex do Data Connect, as chamadas para a API Vertex do Cloud serão feitas diretamente, em vez de pela integração da Vertex no Cloud SQL. No entanto, as chamadas para a API de produção ainda são feitas. Isso significa que você precisa usar um projeto real do Firebase, não pode usar um projeto demo- e vai incorrer em custos da API Vertex.