Запуск функций локально

Firebase CLI включает эмулятор Cloud Functions , который может эмулировать следующие типы функций:

  • HTTPS-функции
  • Вызываемые функции
  • Функции очереди задач
  • Фоновые функции, запускаемые из Firebase Authentication , Realtime Database , Cloud Firestore , Cloud Storage , поддерживаемых оповещений Firebase и Cloud Pub/Sub.

Вы можете запускать функции локально, чтобы протестировать их перед развертыванием в рабочей среде.

Установите Firebase CLI

Чтобы использовать эмулятор Cloud Functions , сначала установите Firebase CLI:

npm install -g firebase-tools

Для использования локального эмулятора ваши Cloud Functions должны зависеть от:

  • firebase-admin версии 8.0.0 или выше.
  • firebase-functions версии 3.0.0 или выше.

Настройте учетные данные администратора (необязательно)

Если вы хотите, чтобы ваши тесты функций взаимодействовали с API Google или другими API Firebase через Firebase Admin SDK , вам может потребоваться настроить учетные данные администратора.

  • Триггеры Cloud Firestore и Realtime Database уже имеют достаточные учетные данные и не требуют дополнительной настройки.
  • Все остальные API, включая API Firebase, такие как Authentication и FCM , или API Google, такие как Cloud Translation или Cloud Speech, требуют шагов настройки, описанных в этом разделе. Это применимо независимо от того, используете ли вы оболочку Cloud Functions или firebase emulators:start .

Чтобы настроить учетные данные администратора для эмулируемых функций:

  1. Откройте панель «Учетные записи служб» консоли Google Cloud .
  2. Убедитесь, что выбрана учетная запись службы App Engine по умолчанию , и используйте меню параметров справа, чтобы выбрать «Создать ключ» .
  3. При появлении запроса выберите JSON в качестве типа ключа и нажмите Создать .
  4. Настройте учетные данные Google по умолчанию так, чтобы они указывали на загруженный ключ:

    Unix

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

    Окна

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

После выполнения этих шагов ваши тесты функций смогут получить доступ к API Firebase и Google с помощью Admin SDK . Например, при тестировании триггера Authentication эмулируемая функция может вызвать admin.auth().getUserByEmail(email) .

Настройка конфигурации функций (необязательно)

Если вы используете переменные конфигурации пользовательских функций, сначала выполните команду, чтобы получить вашу пользовательскую конфигурацию (запустите ее в каталоге functions ) в вашей локальной среде:

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

Запустите эмулятор

Чтобы запустить эмулятор Cloud Functions , используйте команду emulators:start :

firebase emulators:start

Команда emulators:start запустит эмуляторы для Cloud Functions , Cloud Firestore, Realtime Database и Firebase Hosting на основе продуктов, которые вы инициализировали в локальном проекте с помощью firebase init . Если вы хотите запустить определенный эмулятор, используйте флаг --only :

firebase emulators:start --only functions

Если вы хотите запустить тестовый набор или сценарий тестирования после запуска эмуляторов, используйте команду emulators:exec :

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

Настройте свое приложение для взаимодействия с эмуляторами

Чтобы настроить ваше приложение для взаимодействия с эмуляторами, вам может потребоваться выполнить дополнительную настройку.

Оснастите свое приложение вызываемыми функциями

Если ваши прототипы и тестовые действия включают вызываемые внутренние функции , настройте взаимодействие с эмулятором Cloud Functions for Firebase следующим образом:

Kotlin
// 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);
Быстрый
Functions.functions().useEmulator(withHost: "localhost", port: 5001)

Web

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

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

Web

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

Оснастите свое приложение эмуляцией функций HTTPS

Каждая функция HTTPS в вашем коде будет обслуживаться локальным эмулятором с использованием следующего формата URL:

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

Например, простая функция helloWorld с портом хоста и регионом по умолчанию будет обслуживаться по адресу:

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

Инструментируйте свое приложение для эмуляции функций очереди задач

Эмулятор автоматически настраивает эмулируемые очереди задач на основе определений триггеров, а Admin SDK перенаправляет поставленные в очередь запросы в эмулятор, если обнаруживает, что он запущен через переменную среды CLOUD_TASKS_EMULATOR_HOST .

Обратите внимание, что система диспетчеризации, используемая в производстве, сложнее, чем та, что реализована в эмуляторе, поэтому не стоит ожидать, что эмулируемое поведение будет точно отражать производственные среды. Параметры в эмуляторе предоставляют верхние границы скорости, с которой задачи отправляются и повторяются.

Инструментируйте свое приложение для эмуляции фоновых функций

Эмулятор Cloud Functions поддерживает фоновые функции из следующих источников:

  • Эмулятор Realtime Database
  • Эмулятор Cloud Firestore
  • Эмулятор Authentication
  • Эмулятор Pub/Sub
  • Эмулятор оповещений Firebase

Чтобы запустить фоновые события, измените внутренние ресурсы с помощью Emulator Suite UI или подключив свое приложение или тестовый код к эмуляторам с помощью SDK для вашей платформы.

Тестовые обработчики для пользовательских событий, создаваемых расширениями

Для функций, реализуемых для обработки пользовательских событий Firebase Extensions с помощью Cloud Functions v2, эмулятор Cloud Functions объединяется с эмулятором Eventarc для поддержки триггеров Eventarc .

Чтобы протестировать пользовательские обработчики событий для расширений, генерирующих события, необходимо установить эмуляторы Cloud Functions и Eventarc.

Среда выполнения Cloud Functions устанавливает переменную среды EVENTARC_EMULATOR на localhost:9299 в текущем процессе, если запущен эмулятор Eventarc. Firebase Admin SDK автоматически подключается к эмулятору Eventarc, когда установлена ​​переменная среды EVENTARC_EMULATOR . Вы можете изменить порт по умолчанию, как описано в разделе Настройка Local Emulator Suite .

Если переменные среды настроены правильно, Firebase Admin SDK автоматически отправляет события в эмулятор Eventarc. В свою очередь, эмулятор Eventarc делает обратный вызов в эмулятор Cloud Functions для запуска любых зарегистрированных обработчиков.

Подробную информацию о выполнении обработчика можно посмотреть в журналах функций в Emulator Suite UI .

Взаимодействие с другими службами

В комплект эмуляторов входит несколько эмуляторов, позволяющих тестировать взаимодействие между продуктами.

Cloud Firestore

Если у вас есть функции, которые используют Firebase Admin SDK для записи в Cloud Firestore , эти записи будут отправлены в эмулятор Cloud Firestore если он запущен. Если эти записи запускают дополнительные функции, они будут запущены в эмуляторе Cloud Functions .

Cloud Storage

Если у вас есть функции, которые используют Firebase Admin SDK (версия 9.7.0 или выше) для записи в Cloud Storage , эти записи будут отправлены в эмулятор Cloud Storage если он запущен. Если эти записи запускают дополнительные функции, они будут запущены в эмуляторе Cloud Functions .

Firebase Authentication

Если у вас есть функции, которые используют Firebase Admin SDK (версия 9.3.0 или выше) для записи в Firebase Authentication , эти записи будут отправлены в эмулятор Auth, если он запущен. Если эти записи запускают дополнительные функции, они будут запущены в эмуляторе Cloud Functions .

Хостинг Firebase

Если вы используете Cloud Functions для генерации динамического контента для Firebase Hosting , firebase emulators:start использует ваши локальные HTTP-функции в качестве прокси-серверов для хостинга.

Оповещения Firebase

В любом проекте, который включает хотя бы один поддерживаемый триггер оповещения Firebase, пользовательский интерфейс эмулятора включает вкладку FireAlerts . Чтобы эмулировать триггер оповещения:

  1. Откройте вкладку FireAlerts . На этой вкладке отображается раскрывающийся список, заполненный типами оповещений, с которыми связаны триггеры (например, если у вас есть триггер onNewFatalIssuePublished, то отображается crashlytics.newFatalIssue).
  2. Выберите тип оповещения. Форма автоматически заполняется значениями по умолчанию, которые можно редактировать. Вы можете редактировать поля события (остальная информация из события оповещения либо выводится, либо является фиктивными значениями, либо генерируется случайным образом).
  3. Выберите «Отправить оповещение» , чтобы отправить синтетическое оповещение в эмулятор функций с возможностью регистрации в разделе «Оповещения» в консоли Firebase (а также в журналах).

Ведение журнала

Эмулятор транслирует логи из ваших функций в окно терминала, где они выполняются. Он отображает весь вывод из операторов console.log() , console.info() , console.error() и console.warn() внутри ваших функций.

Следующие шаги

Полный пример использования набора эмуляторов Firebase см. в примере быстрого запуска тестирования .