Оболочка Cloud Functions предоставляет интерактивную оболочку для вызова функций с тестовыми данными. Оболочка поддерживает все типы триггеров.
Настройте учетные данные администратора (необязательно)
Если вы хотите, чтобы ваши тесты функций взаимодействовали с 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 functions:shell
Окна
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase functions:shell
После выполнения этих шагов ваши тесты функций смогут получить доступ к API Firebase и Google с помощью Admin SDK . Например, при тестировании триггера Authentication эмулируемая функция может вызвать admin.auth().getUserByEmail(email)
.
Выполнение функций с использованием оболочки Cloud Functions
Оболочка Cloud Functions эмулирует все типы триггеров функций с помощью интерактивной оболочки для вызова функций с тестовыми данными. Параметры различаются в зависимости от типа функции, но базовый формат использования:
myFunctionName(data, options)
Параметр data
является обязательным для Realtime Database, Cloud Firestore и триггеров PubSub и необязательным для всех других типов функций. Кроме того, необязательный параметр options
действителен только для функций Realtime Database и Cloud Firestore.
При желании вы можете загрузить тестовые данные из локального файла, сохранив файл как переменную и вызвав с ней функцию:
var data = require('./path/to/testData.json');
myFunction(data);
Установка и настройка оболочки Cloud Functions
Для использования этой функции firebase-tools
должен иметь версию не ниже 3.11.0, а firebase-functions
SDK — версию не ниже 0.6.2. Чтобы обновить оба, выполните следующие команды в каталоге functions/
вашего проекта:
npm install --save firebase-functions@latest
npm install -g firebase-tools
Если вы используете переменные конфигурации пользовательских функций, сначала выполните команду, чтобы получить вашу пользовательскую конфигурацию (запустите ее в каталоге functions
) в вашей локальной среде:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Наконец, запустите оболочку с помощью следующей команды:
firebase functions:shell
Вызов функций HTTPS
Для вызова функций HTTPS в оболочке использование такое же, как и у модуля NPM request
, но замените request
на имя функции, которую вы хотите эмулировать. Например:
# invoke
myHttpsFunction()
myHttpsFunction.get()
myHttpsFunction.post()
# invoke at sub-path
myHttpsFunction('/path')
myHttpsFunction.get('/path')
myHttpsFunction.post('/path')
# send POST request with form data
myHttpsFunction.post('/path').form( {foo: 'bar' })
Вызов функций HTTPS-вызова
При локальном вызове функций HTTPS Callable вам необходимо предоставить соответствующие тестовые данные.
# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})
При желании вы можете передать Firebase-Instance-ID-token
в качестве второго параметра. Это должна быть строка.
# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})
Эмуляция context.auth
в настоящее время недоступна.
Вызов функций базы данных в реальном времени
При локальном запуске функций Realtime Database вам необходимо предоставить соответствующие тестовые данные. Обычно это означает предоставление новых тестовых данных для операций onCreate
, старых/удаленных данных для операций onDelete
и обоих для функций onUpdate
или onWrite
:
# invoke onCreate function
myDatabaseFunction('new_data')
# invoke onDelete function
myDatabaseFunction('old_data')
# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })
В дополнение к параметрам before/after
оболочка предоставляет параметр params
для использования в качестве подстановочных знаков в пути:
# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})
По умолчанию оболочка запускает функции Realtime Database с привилегиями администратора (учетная запись службы). Используйте опцию auth
, чтобы вместо этого запускать функции как определенный конечный пользователь или как неаутентифицированный пользователь:
# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})
Вызов функций Firestore
При локальном запуске функций Firestore вам необходимо предоставить соответствующие тестовые данные. Обычно это означает предоставление новых тестовых данных для операций onCreate
, старых/удаленных данных для операций onDelete
и обоих для функций onUpdate
или onWrite
. Обратите внимание, что данные Firestore должны быть парами ключ-значение; см. Поддерживаемые типы данных .
# invoke onCreate function
myFirestoreFunction({foo: ‘new’})
# invoke onDelete function
myFirestoreFunction({foo: ‘old’})
# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })
В дополнение к полям before/after
объекта data
вы можете использовать поля params
объекта « options
для имитации подстановочных знаков в имени документа:
# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})
Оболочка всегда запускает функции Firestore с правами администратора, то есть она имитирует событие создания/обновления/удаления, как если бы оно было выполнено пользователем с правами администратора.
Вызов функций PubSub
Для функций PubSub вставьте полезную нагрузку сообщения в экземпляр Buffer
и при необходимости добавьте атрибуты данных, как показано:
// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})
Вызов функций аналитики
Вы можете вызвать функцию Analytics без каких-либо данных, запустив myAnalyticsFunction()
в оболочке. Чтобы запустить функцию с тестовыми данными, рекомендуется определить переменную для конкретных полей данных событий, которые требуются вашей функции:
var data = {
eventDim: [{
// populates event.data.params
params: {foo: {stringValue: 'bar'} },
// Also valid:
// {intValue: '10'}, {floatValue: '1.0'}, {doubleValue: '1.0'}
// populates event.data.name
name: 'event_name',
// populates event.data.logTime, specify in microseconds
timestampMicros: Date.now() * 1000,
// populates event.data.previousLogTime, specify in microseconds
previousTimestampMicros: Date.now() * 1000,
// populates event.data.reportingDate, specify in 'YYYYMMDD' format
date: '20170930',
// populates event.data.valueInUSD
valueInUsd: 230
}],
userDim: userDim
};
myAnalyticsFunction(data);
Вызов функций хранения и аутентификации
Для функций Storage и Auth вызовите локальную функцию с тестовыми данными, которые вы хотели бы видеть внутри функции. Ваши тестовые данные должны соответствовать соответствующим форматам данных:
- Для Cloud Storage :
ObjectMetadata
- Для Authentication :
UserRecord
Укажите только те поля, от которых зависит ваш код, или не указывайте ни одного, если вы хотите только запустить функцию.