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ão8.0.0
ou superior. -
firebase-functions
versão3.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:
- Abra o painel Contas de serviço do console do Google Cloud.
- 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 .
- Quando solicitado, selecione JSON para o tipo de chave e clique em Criar .
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 .