Интерфейс командной строки Firebase включает эмулятор Cloud Functions, который может эмулировать следующие типы функций:
- Функции HTTPS
- Вызываемые функции
- Функции очереди задач
- Фоновые функции, активируемые из Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, поддерживаемых оповещений Firebase и Cloud Pub/Sub.
Вы можете запускать функции локально, чтобы протестировать их перед развертыванием в рабочей среде.
Установите интерфейс командной строки Firebase
Чтобы использовать эмулятор Cloud Functions, сначала установите интерфейс командной строки Firebase:
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.
Чтобы настроить учетные данные администратора для эмулированных функций:
- Откройте панель сервисных аккаунтов в консоли Google Cloud.
- Убедитесь, что выбран сервисный аккаунт по умолчанию для App Engine, и в меню параметров справа выберите Создать ключ.
- В появившемся окне выберите тип ключа JSON и нажмите Создать.
Укажите в учетных данных Google по умолчанию путь к скачанному ключу:
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase emulators:start
После выполнения этих шагов ваши тесты функций смогут получить доступ к Firebase и API 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
Запустите Emulator Suite
Чтобы запустить эмулятор Cloud Functions, используйте команду emulators:start:
firebase emulators:start
Команда emulators:start запустит эмуляторы для Cloud Functions, Cloud Firestore, Realtime Database и Firebase Hosting в зависимости от того, какие продукты вы инициализировали в локальном проекте с помощью firebase
init. Чтобы запустить определенный эмулятор, используйте флаг --only:
firebase emulators:start --only functions
Если вы хотите запустить набор тестов или тестовый скрипт после запуска эмуляторов, используйте команду emulators:exec:
firebase emulators:exec "./my-test.sh"
После запуска эмулятор передает журналы из ваших функций в окно терминала, в котором он работает. В нем отображаются все выходные данные операторов console.log(), console.info(), console.error() и console.warn() в функциях.
Обратите внимание, что по умолчанию эмулятор имитирует развертывание функций в определенном регионе (us-central1), который может не совпадать с регионом, используемым по умолчанию для развертывания в рабочей среде. Подробнее о регионах Cloud Functions…
Как настроить приложение для взаимодействия с эмуляторами
Чтобы настроить приложение для взаимодействия с эмуляторами, вам может потребоваться выполнить некоторую дополнительную настройку.
Как настроить приложение для работы с вызываемыми функциями
Если в прототипе и тестовых действиях используются вызываемые функции бэкенда, настройте взаимодействие с эмулятором Cloud Functions for Firebase следующим образом:
Kotlin
// 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);
Swift
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance; // Connects to the Functions Emulator running on port 5001 functions.UseFunctionsEmulator("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 версии 2, эмулятор 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.
Взаимодействие с другими сервисами
В Emulator Suite входит несколько эмуляторов, которые позволяют тестировать взаимодействие между продуктами.
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, эти записи будут отправляться в эмулятор Auth, если он запущен. Если эти записи активируют дополнительные функции, они будут запущены в эмуляторе Cloud Functions.
Firebase Hosting
Если вы используете Cloud Functions для создания динамического контента для Firebase Hosting, firebase emulators:start использует локальные функции HTTP в качестве прокси-серверов для хостинга.
Оповещения Firebase
В любом проекте, который включает хотя бы один поддерживаемый триггер оповещений Firebase, в интерфейсе эмулятора есть вкладка FireAlerts. Чтобы сымитировать триггер оповещения:
- Откройте вкладку FireAlerts. На этой вкладке отображается раскрывающийся список, заполненный типами оповещений, с которыми связаны триггеры (например, если у вас есть триггер onNewFatalIssuePublished, то отображается crashlytics.newFatalIssue).
- Выберите тип оповещения. Форма заполняется автоматически значениями по умолчанию, которые можно изменить. Вы можете изменить поля события (другая информация из события оповещения выводится, имитируется или генерируется случайным образом).
- Выберите Send Alert (Отправить оповещение), чтобы отправить синтетическое оповещение в эмулятор функций. Запись о нем появится в разделе Alerts (Оповещения) консоли Firebase и в журналах.
Дальнейшие действия
Полный пример использования Firebase Emulator Suite можно найти в кратком руководстве по тестированию.