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

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

  • HTTPS-функции
  • Вызываемые функции
  • Фоновые функции, запускаемые аутентификацией Firebase, базой данных в реальном времени, облачным хранилищем Firestore, облачным хранилищем и облачным Pub/Sub.

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

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

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

npm install -g firebase-tools

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

  • 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 Console.
  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
    

После выполнения этих шагов ваши тесты функций могут получить доступ к Firebase и Google API с помощью Admin SDK . Например, при тестировании триггера аутентификации эмулируемая функция может вызывать 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 запустит эмуляторы для облачных функций, облачного хранилища 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 modular API

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

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

Web namespaced API

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

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

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

  • Эмулятор базы данных в реальном времени
  • Эмулятор облачного хранилища Firestore
  • Эмулятор аутентификации
  • Эмулятор паб/саб

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

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

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

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

Среда выполнения облачных функций задает для переменной среды EVENTARC_EMULATOR значение localhost:9299 в текущем процессе, если запущен эмулятор Eventarc. Пакеты Firebase Admin SDK автоматически подключаются к эмулятору Eventarc, когда установлена ​​переменная среды EVENTARC_EMULATOR . Вы можете изменить порт по умолчанию, как описано в разделе «Настройка локального эмулятора» .

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

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

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

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

Облако Firestore

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

Облачное хранилище

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

Аутентификация Firebase

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

Хостинг Firebase

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

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

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

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

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