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

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

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

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

Установите интерфейс командной строки Firebase

Чтобы использовать эмулятор 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 по умолчанию, чтобы они указывали на загруженный ключ:

    Юникс

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

firebase emulators:start --only functions

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

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

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

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

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

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

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);
Быстрый
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1: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. Откройте вкладку «Пожарные оповещения» . На этой вкладке отображается раскрывающийся список, заполненный типами оповещений, с которыми связаны триггеры (например, если у вас есть триггер onNewFatalIssuePublished, то отображается Crashlytics.newFatalIssue).
  2. Выберите тип оповещения. Форма автоматически заполняется значениями по умолчанию, которые можно редактировать. Вы можете редактировать поля события (остальная информация из события оповещения является либо выведенной, либо фиктивной, либо генерируется случайным образом).
  3. Выберите «Отправить оповещение» , чтобы отправить синтетическое оповещение в эмулятор функций, при этом ведение журнала доступно в разделе «Оповещения» в консоли Firebase (а также в журналах).

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

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

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

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