Интерфейс командной строки 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
.
Чтобы настроить учетные данные администратора для эмулируемых функций:
- Откройте панель «Учетные записи служб» в Google Cloud Console.
- Убедитесь, что выбрана учетная запись службы App Engine по умолчанию , и используйте меню параметров справа, чтобы выбрать Создать ключ .
- При появлении запроса выберите JSON в качестве типа ключа и нажмите «Создать» .
Установите учетные данные 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 см. в образце быстрого запуска тестирования .