Executar funções localmente

Execute funções localmente para testá-las antes da implantação na produção. Para executar funções localmente, use:

  • o shell do Cloud Functions. Essa ferramenta emula todos os tipos de ativadores de função e fornece um shell interativo para invocar as funções com dados de teste;
  • o comando firebase serve da Firebase CLI. Essa ferramenta emula funções HTTPS para fornecer um URL que aciona a função local.

Para ambas as ferramentas, as alterações de código que você faz durante uma sessão ativa são automaticamente recarregadas pelo emulador. Se o código precisar ser transcompilado (TypeScript, React), faça isso antes de executar o emulador.

Configurar credenciais de administrador (opcional)

Se você quiser que seus testes de funções interajam com outras APIs do Firebase e do Google por meio do SDK Admin do Firebase, talvez seja necessário configurar credenciais de administrador. Observação:

  • Os acionadores do Cloud Firestore e do Realtime Database já têm as credenciais necessárias e não requerem configuração adicional.
  • Para todas as outras APIs, incluindo as APIs do Firebase (como Authentication e FCM) ou APIs do Google (como a Cloud Translation ou Cloud Speech), será necessário concluir as etapas de configuração descritas nesta seção. Isso se aplicará se você estiver usando o shell do Functions ou o firebase serve.

Para configurar credenciais de administrador para funções emuladas (que não sejam do Cloud Firestore e Realtime Database), faça o seguinte:

  1. Abra o painel de contas de serviço do Google Cloud Console.
  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 salva:

    Unix

    $ export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    
    $ firebase functions:shell
    
    OR
    
    $ firebase serve --only functions
    

    Windows

    $ set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    
    $ firebase functions:shell
    
    OR
    
    $ firebase serve --only functions
    

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 acionador do Authentication, a função emulada poderá chamar admin.auth().getUserByEmail(email).

Disponibilizar funções HTTP da linha de comando

Disponibilize e execute funções HTTP localmente usando a Firebase CLI. Com ela, é possível visualizar e testar seu projeto do Firebase antes de implantá-lo na produção.

  1. Certifique-se de que tanto a Firebase CLI quanto o SDK do firebase-functions usem as versões mais recentes disponíveis. Para atualizá-los, execute os seguintes comandos no diretório functions do seu projeto local:

    npm install -g firebase-tools
    npm install --save firebase-functions@latest
  2. Para disponibilizar seu projeto do Firebase localmente, execute o seguinte comando na raiz do diretório do projeto.

    Este comando emula a hospedagem e as funções em URLs hospedados localmente.

    firebase serve
Se você estiver usando o Cloud Functions para gerar conteúdo dinâmico para o Firebase Hosting, o firebase serve, por padrão, usará suas funções HTTP locais como proxies para hospedagem. Para ver mais opções de configuração do Firebase Hosting e Cloud Functions, consulte a Referência da Firebase CLI.

Veicular 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 de Realtime Database e PubSub, mas é opcional para todos os outros tipos de função. Além disso, o parâmetro options opcional é válido apenas para funções do Realtime Database.

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 ambas, execute os seguintes comandos no diretório functions/ do seu projeto:

npm install --save firebase-functions@latest
npm install -g firebase-tools

Se você não estiver usando variáveis de configuração de funções personalizadas, execute o shell com o seguinte comando:

firebase functions:shell

Se você estiver usando variáveis de configuração de funções personalizadas, primeiro execute o comando para receber sua configuração personalizada (faça isso no diretório functions) e, em seguida, execute o shell:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json
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. 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 Instance ID 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 proporcionar 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 ser usada nos caracteres curinga de simulação 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. 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. Observe que 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 de before/after, o shell fornece a opção params para ser usada nos caracteres curinga de simulação 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 PubSub

Para as funções 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:'bar'},
    // 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, Auth e Crashlytics

Nas funções do Storage, Auth e Crashlytics, 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:

Especifique apenas os campos de que seu código depende ou, caso você queira apenas executar a função, não especifique campos.

Logging

Tanto o firebase serve como o shell do Cloud Functions transmitem os registros das suas funções para a janela do terminal em que eles são executados. Eles exibem todos os resultados das instruções console.log(), console.info(), console.error() e console.warn() dentro das suas funções.

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.