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