Развертывание облачных функций очень медленное. Развертывание обычно завершается за 30 секунд, но иногда это занимает более 10 минут. Это пустая трата времени, чтобы подождать несколько минут, просто переписывая одну линию.
Облачный эмулятор очень полезен. Тем не менее, трудно создать тестовые данные JSON, и невозможно записать тесты.
Давайте эмулируем функции локально с спасение-огня и сделать TDD.
Облачные функции начинаются с переменной, называемой событие Анкет
exports.updateUser = functions.firestore.document('users/{userId}')
.onCreate(event => {
console.log('old name', event.data.data().name)
return event.data.ref.update({name: 'new name'})
})
Если вы можете создать это событие , вы можете использовать Админ SDK запустить почти тот же код, что и облачные функции. спасение-огня делает это событие Анкет
1. Монтаж
npm install rescue-fire --only=dev yarn add --dev rescue-fire
2. Подготовить учетные данные Google Cloud Account
Загрузите ключ учетной записи службы JSON.
https://firebase.google.com/docs/admin/setup?authuser=0#add_firebase_to_your_app
Этот файл JSON чувствителен, будьте осторожны.
Важно: этот файл содержит конфиденциальную информацию, включая личный ключ шифрования вашей учетной записи службы. Сохраняйте это конфиденциально и никогда не храните в общественном хранилище.
3. Установите библиотеку тестирования
Пожалуйста, используйте свою любимую библиотеку тестирования.
Например, в случае Шутка :
npm install jest --only=dev yarn add --dev jest
4. Напишите тест
Давайте создадим функцию для обновления имени при создании пользователя. Код функции заключается в следующем.
Этот образец написан в TypeScript.
const changeName = (event: functions.Event) => { console.log('old name', event.data.data().name) return event.data.ref.update({ name: 'new name' }) }
Тест будет таким.
import 'jest'
import * as admin from 'firebase-admin'
import * as functions from 'firebase-functions'
import * as Rescue from 'rescue-fire'
// Set up to run firebase in local.
beforeAll(() => {
const serviceAccount = require('./your-firebase-adminsdk.json')
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
})
})
test('update name', async () => {
// prepare
const data = {name: 'name'}
const user = await admin.firestore().collection('user').add(data)
const event = Rescue.event(user, data)
// start Cloud Functions
await changeName(event)
// expect name changed
const updatedUser = await admin.firestore().collection('user').doc(user.id).get()
expect(updatedUser.data()!.name).toBe('new name')
})
Облачные функции могут быть разработаны с помощью TDD. (Строго не TDD 🙃)
Это небольшая функция, но заказываемый.test.ts тестирует огромные функции с помощью спасательного огня.
Дополнительные параметры Defentions – это Здесь Анкет
4. Наконец, создайте функции
exports.updateUser = functions.firestore
.document('users/{userId}')
.onCreate(event => {
return changeName(event)
})
🎉
Заметки
Событие, созданное спасательным огнем, не завершено. Я думаю, что этого достаточно, чтобы писать тесты, но имейте в виду, что оно отличается от фактического события.
Пожалуйста, используйте Starhoshi/Rescue-Fire: тестовый помощник для облачных функций. !
Оригинал: “https://dev.to/star__hoshi/tdd-in-cloud-functions-for-firebase-using-rescue-fire–413d”