Оболочка 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
Windows
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, вам потребуется предоставить соответствующие тестовые данные.
# 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}})
По умолчанию оболочка запускает функции базы данных реального времени с правами администратора (служебной учетной записи). Используйте параметр 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);
Вызов функций хранения и аутентификации.
Для функций хранения и аутентификации вызовите локальную функцию с тестовыми данными, которые вы хотите увидеть внутри функции. Ваши тестовые данные должны соответствовать соответствующим форматам:
- Для Cloud Storage :
ObjectMetadata - Для Authentication :
UserRecord
Укажите только те поля, от которых зависит ваш код, или не указывайте ни одного, если вам нужно только запустить функцию.