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

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

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

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

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

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

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, такие как аутентификация и 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 . Например, при тестировании триггера аутентификации эмулируемая функция может вызвать 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 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 Firestore
  • Эмулятор аутентификации
  • Эмулятор Pub/Sub

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

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

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

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

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

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

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

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

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

Облачный пожарный магазин

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

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

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

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

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

Хостинг Firebase

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

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

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

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

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