A Firebase CLI inclui um emulador 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 o Firebase CLI:
npm install -g firebase-tools
Para usar o emulador local, seu Cloud Functions deve depender de:
-
firebase-admin
versão8.0.0
ou superior. -
firebase-functions
versão3.0.0
ou superior.
Configurar credenciais de administrador (opcional)
Se você deseja que seus testes de funções interajam com as APIs do Google ou outras APIs do Firebase por meio do Firebase Admin SDK , pode ser necessário configurar credenciais de administrador.
- Os gatilhos Cloud Firestore e Realtime Database já têm credenciais suficientes e não requerem 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 os
firebase emulators:start
.
Para configurar credenciais de administrador para funções emuladas:
- Abra o painel Contas de serviço do Console do Google Cloud.
- Certifique-se de que a conta de serviço padrão do App Engine esteja 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 podem acessar as APIs do Firebase e do Google usando o Admin SDK . Por exemplo, ao testar um acionador de autenticação, a função emulada pode 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 isso no diretório de 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 pacote do emulador
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 um 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, talvez seja 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 da seguinte 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://localhost:5001")
Web version 9
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "localhost", 5001);
Web version 8
firebase.functions().useEmulator("localhost", 5001);
Instrumente seu aplicativo para emulação de funções HTTPS
Cada função HTTPS em seu código será fornecida pelo emulador local usando o seguinte formato de URL:
http:// $HOST : $PORT / $PROJECT / $REGION / $NAME
Por exemplo, uma função helloWorld
simples com a porta e região do host padrão seria atendida 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 é compatível com 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 para sua plataforma.
Manipuladores de teste para eventos personalizados emitidos por extensões
Para funções que você implementa para lidar com eventos personalizados do Firebase Extensions com o Cloud Functions v2, o emulador do Cloud Functions é emparelhado com o emulador Eventarc para oferecer suporte a gatilhos 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 Firebase Admin SDKs 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 Configure Local Emulator Suite .
Quando as variáveis de ambiente são configuradas corretamente, o Firebase Admin SDK 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 qualquer manipulador registrado.
Você pode verificar os logs de funções na interface do usuário do pacote do emulador 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 o teste de interações entre produtos.
Cloud Firestore
Se você tiver funções que usam o Firebase Admin SDK 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 Firebase Admin SDK (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 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 do 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 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 , o 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 eles são executados. 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 obter um exemplo completo de como usar o conjunto de emuladores do Firebase, consulte o exemplo de início rápido de teste .