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

В состав 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
    

    Windows

    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 , эти записи будут отправлены в эмулятор аутентификации, если он запущен. Если эти записи запускают другие функции, они будут выполняться в эмуляторе 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 см. в примере быстрого запуска тестирования .