Executar funções localmente

A CLI do Firebase inclui um emulador do Cloud Functions que pode emular os seguintes tipos de função:

  • Funções HTTPS
  • Funções chamáveis
  • Funções em segundo plano acionadas pelo Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage e Cloud Pub/Sub.

Você pode executar funções localmente para testá-las antes de implantá-las na produção.

Instale a CLI do Firebase

Para usar o emulador do Cloud Functions, primeiro instale a CLI do Firebase:

npm install -g firebase-tools

Para usar o emulador local, o Cloud Functions precisa depender de:

  • firebase-admin versão 8.0.0 ou superior.
  • firebase-functions versão 3.0.0 ou superior.

Configure credenciais de administrador (opcional)

Se quiser que seus testes de funções interajam com APIs do Google ou outras APIs do Firebase por meio do Firebase Admin SDK , talvez seja necessário configurar credenciais de administrador.

  • Os acionadores do Cloud Firestore e do Realtime Database já têm credenciais suficientes e não exigem configuração adicional.
  • Todas as outras APIs, incluindo APIs do Firebase, como Authentication e FCM, ou APIs do Google, como Cloud Translation ou Cloud Speech, exigem as etapas de configuração descritas nesta seção. Isso se aplica se você estiver usando o shell do Cloud Functions ou firebase emulators:start .

Para configurar credenciais de administrador para funções emuladas:

  1. Abra o painel Contas de serviço do console do Google Cloud.
  2. Verifique se a conta de serviço padrão do App Engine está selecionada e use o menu de opções à direita para selecionar Criar chave .
  3. Quando solicitado, selecione JSON para o tipo de chave e clique em Criar .
  4. Defina suas credenciais padrão do Google para apontar para a chave baixada:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    janelas

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

Depois de concluir essas etapas, seus testes de funções poderão acessar as APIs do Firebase e do Google usando o SDK Admin . Por exemplo, ao testar um gatilho de autenticação, a função emulada poderia chamar admin.auth().getUserByEmail(email) .

Definir configuração de funções (opcional)

Se você estiver usando variáveis ​​de configuração de funções personalizadas, primeiro execute o comando para obter sua configuração personalizada (execute-a no diretório functions ) em seu ambiente local:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Execute o conjunto de emuladores

Para executar o emulador do Cloud Functions, use o comando emulators:start :

firebase emulators:start

O comando emulators:start iniciará emuladores para Cloud Functions, Cloud Firestore, Realtime Database e Firebase Hosting com base nos produtos que você inicializou em seu projeto local usando firebase init . Se você deseja iniciar um emulador específico, use o sinalizador --only :

firebase emulators:start --only functions

Se você deseja executar um conjunto de testes ou script de teste após o início dos emuladores, use o comando emulators:exec :

firebase emulators:exec "./my-test.sh"

Instrumente seu aplicativo para conversar com os emuladores

Para instrumentar seu aplicativo para interagir com os emuladores, pode ser necessário fazer algumas configurações adicionais.

Instrumente seu aplicativo para funções que podem ser chamadas

Se suas atividades de protótipo e teste envolverem funções de back-end que podem ser chamadas , configure a interação com o emulador do Cloud Functions para Firebase desta forma:

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 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);
Rápido
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web modular API

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web namespaced API

firebase.functions().useEmulator("127.0.0.1", 5001);

Instrumente seu aplicativo para emulação de funções HTTPS

Cada função HTTPS no seu código será veiculada no emulador local usando o seguinte formato de URL:

http:// $HOST : $PORT / $PROJECT / $REGION / $NAME

Por exemplo, uma função simples helloWorld com a porta e região do host padrão seria servida em:

https://localhost:5001/ $PROJECT /us-central1/helloWorld

Instrumente seu aplicativo para emulação de funções acionadas em segundo plano

O emulador do Cloud Functions oferece suporte a funções acionadas em segundo plano das seguintes fontes:

  • Emulador de banco de dados em tempo real
  • Emulador Cloud Firestore
  • Emulador de autenticação
  • Emulador Pub/Sub

Para acionar eventos em segundo plano, modifique os recursos de back-end usando a IU do Emulator Suite ou conectando seu aplicativo ou código de teste aos emuladores usando o SDK da sua plataforma.

Manipuladores de teste para eventos personalizados emitidos por extensões

Para funções que você implementa para lidar com eventos personalizados de extensões do Firebase com o Cloud Functions v2, o emulador do Cloud Functions é emparelhado com o emulador do Eventarc para oferecer suporte a gatilhos do Eventarc .

Para testar manipuladores de eventos personalizados para extensões que emitem eventos, você deve instalar os emuladores Cloud Functions e Eventarc.

O tempo de execução do Cloud Functions define a variável de ambiente EVENTARC_EMULATOR como localhost:9299 no processo atual se o emulador Eventarc estiver em execução. Os SDKs Admin do Firebase se conectam automaticamente ao emulador Eventarc quando a variável de ambiente EVENTARC_EMULATOR é definida. Você pode modificar a porta padrão conforme discutido em Configurar conjunto de emuladores locais .

Quando as variáveis ​​de ambiente são configuradas corretamente, o SDK Admin do Firebase envia eventos automaticamente para o emulador Eventarc. Por sua vez, o emulador Eventarc faz uma chamada de volta para o emulador Cloud Functions para acionar quaisquer manipuladores registrados.

Você pode verificar os logs do Functions na UI do Emulator Suite para obter detalhes sobre a execução do manipulador.

Interações com outros serviços

O conjunto de emuladores inclui vários emuladores, que permitem testar interações entre produtos.

Cloud Firestore

Se você tiver funções que usam o SDK Admin do Firebase para gravar no Cloud Firestore, essas gravações serão enviadas para o emulador do Cloud Firestore, se ele estiver em execução. Se outras funções forem acionadas por essas gravações, elas serão executadas no emulador do Cloud Functions.

Armazenamento na núvem

Se você tiver funções que usam o SDK Admin do Firebase (versão 9.7.0 ou superior) para gravar no Cloud Storage, essas gravações serão enviadas para o emulador do Cloud Storage, se ele estiver em execução. Se outras funções forem acionadas por essas gravações, elas serão executadas no emulador do Cloud Functions.

Autenticação Firebase

Se você tiver funções que usam o Firebase Admin SDK (versão 9.3.0 ou superior) para gravar no Firebase Authentication, essas gravações serão enviadas para o emulador Auth se ele estiver em execução. Se outras funções forem acionadas por essas gravações, elas serão executadas no emulador do Cloud Functions.

Hospedagem Firebase

Se você estiver usando o Cloud Functions para gerar conteúdo dinâmico para o Firebase Hosting , firebase emulators:start usará suas funções HTTP locais como proxies para hospedagem.

Exploração madeireira

O emulador transmite logs de suas funções para a janela do terminal onde elas são executadas. Ele exibe todas as saídas das console.log() , console.info() , console.error() e console.warn() dentro de suas funções.

Próximos passos

Para ver um exemplo completo de uso do pacote de emuladores do Firebase, consulte o exemplo de início rápido de testes .