O shell do Cloud Functions fornece um shell interativo para invocar funções com dados de teste. O shell é compatível com todos os tipos de acionadores.
Configurar credenciais de administrador (opcional)
Para que os testes de funções interajam com outras APIs do Google ou do Firebase pelo SDK Admin do Firebase, talvez você precise configurar credenciais de administrador.
- Os gatilhos do Cloud Firestore e do Realtime Database já têm as credenciais necessárias e não exigem configuração adicional.
- Para todas as outras APIs, incluindo as APIs do Firebase (como Authentication e FCM) ou as APIs do Google (como Cloud Translation ou Cloud Speech), será necessário concluir as etapas de configuração descritas nesta seção. Isso se aplica ao usar o shell do Cloud Functions ou
firebase emulators:start
.
Se quiser configurar credenciais de administrador para funções emuladas:
- Abra o painel de 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.
- Selecione JSON para a opção do tipo de chave e clique em Criar.
Defina suas credenciais padrão do Google para apontar para a chave salva:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase functions:shell
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
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 do Authentication, a função emulada poderá chamar
admin.auth().getUserByEmail(email)
.
Exibir funções usando um shell do Cloud Functions
O shell do Cloud Functions emula todos os tipos de acionadores de função com um shell interativo para invocar as funções com dados de teste. As opções variam de acordo com o tipo de função, mas o formato de uso básico é:
myFunctionName(data, options)
O parâmetro data
é necessário para os acionadores do Realtime Database, Cloud Firestore
e PubSub. Ele é opcional para todos os outros tipos de função.
Além disso, o parâmetro opcional options
é válido apenas para as funções do Realtime Database
e do Cloud Firestore.
Como alternativa, você pode salvar o arquivo como uma variável para carregar dados de teste de um arquivo local e, então, invocar uma função com ele:
var data = require('./path/to/testData.json');
myFunction(data);
Instalar e configurar o shell do Cloud Functions
Para usar esse recurso, a versão mínima de firebase-tools
precisa ser 3.11.0 e
a versão mínima do SDK firebase-functions
precisa ser 0.6.2. Para atualizar ambos os recursos,
execute os seguintes comandos no diretório functions/
do seu projeto:
npm install --save firebase-functions@latest
npm install -g firebase-tools
Se você estiver usando variáveis de configuração de funções personalizadas, primeiro execute o
comando para receber a configuração personalizada (execute isso no diretório functions
)
no ambiente local:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Por fim, execute o shell com o seguinte comando:
firebase functions:shell
Invocar funções HTTPS
Os comandos para chamar funções HTTPS no shell são semelhantes aos usados no módulo NPM
request
. Para fazer isso, basta substituir
request
pelo nome da função que você quer emular. Exemplo:
# invoke
myHttpsFunction()
myHttpsFunction.get()
myHttpsFunction.post()
# invoke at sub-path
myHttpsFunction('/path')
myHttpsFunction.get('/path')
myHttpsFunction.post('/path')
# send POST request with form data
myHttpsFunction.post('/path').form( {foo: 'bar' })
Invocar funções HTTPS chamáveis
Para invocar localmente funções HTTPS chamáveis, você precisará fornecer dados de teste apropriados.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
Opcionalmente, você pode transmitir um Firebase-Instance-ID-token
como o segundo parâmetro. Ele precisa ser uma string.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
A emulação de context.auth
está indisponível no momento.
Invocar funções do Realtime Database
Ao executar as funções do Realtime Database localmente, você precisará fornecer
dados de teste adequados. Geralmente, isso significa enviar novos dados de teste para operações
onCreate
, dados antigos/removidos para operações onDelete
e ambos para
funções onUpdate
ou onWrite
.
# invoke onCreate function
myDatabaseFunction('new_data')
# invoke onDelete function
myDatabaseFunction('old_data')
# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })
Além das opções before/after
, o shell fornece a opção params
para usar em caractere curingas em um caminho:
# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})
Por padrão, o shell executa funções do Realtime Database com privilégios de administrador
(conta de serviço). Use a opção auth
para, em vez disso, executar funções como um usuário final específico
ou como um usuário não autenticado:
# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})
Invocar funções do Firestore
Ao executar as funções do Firestore localmente, você precisará fornecer
dados de teste adequados. Geralmente, isso significa enviar novos dados de teste para operações
onCreate
, dados antigos/removidos para operações onDelete
e ambos
para funções onUpdate
ou onWrite
. Os dados do Firestore precisam ser
pares de chave-valor. Consulte a seção Tipos de dados aceitos.
# invoke onCreate function
myFirestoreFunction({foo: ‘new’})
# invoke onDelete function
myFirestoreFunction({foo: ‘old’})
# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })
Além dos campos before/after
do objeto data
,
é possível usar os campos params
no objeto options
para simular
caracteres curinga em um nome de documento:
# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})
O shell sempre executa funções do Firestore com privilégios de administrador, o que significa que ele emula um evento da criação/atualização/exclusão como se fosse feito por um usuário administrador.
Invocar funções do PubSub
Para as funções do PubSub, informe o payload da sua mensagem em uma instância Buffer
e,
se quiser, adicione os atributos de dados como mostrado a seguir:
// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})
Invocar funções do Analytics
Execute myAnalyticsFunction()
no shell para invocar uma função do Analytics
sem nenhum dado.
Para executar a função com dados de teste, recomendamos que você defina uma variável para os campos de dados de eventos
específicos que sua função precisa:
var data = {
eventDim: [{
// populates event.data.params
params: {foo: {stringValue: 'bar'} },
// Also valid:
// {intValue: '10'}, {floatValue: '1.0'}, {doubleValue: '1.0'}
// populates event.data.name
name: 'event_name',
// populates event.data.logTime, specify in microseconds
timestampMicros: Date.now() * 1000,
// populates event.data.previousLogTime, specify in microseconds
previousTimestampMicros: Date.now() * 1000,
// populates event.data.reportingDate, specify in 'YYYYMMDD' format
date: '20170930',
// populates event.data.valueInUSD
valueInUsd: 230
}],
userDim: userDim
};
myAnalyticsFunction(data);
Invocar funções do Storage e do Auth
Para funções do Storage e do Auth, invoque a função local com os dados de teste que você gostaria de ver dentro dela. Os dados de teste precisam seguir os formatos de dados correspondentes:
- Para Cloud Storage:
ObjectMetadata
- Para Authentication:
UserRecord
Especifique apenas os campos de que seu código depende ou, caso você queira apenas executar a função, não especifique campos.