Рубрики
Без рубрики

TDD в облачных функциях для Firebase с использованием Rescue-Fire

TDD в облачных функциях для Firebase с использованием Rescue-Fire. Tagged с помощью Firebase, Cloud Functions, TypeScript, JavaScript.

Развертывание облачных функций очень медленное. Развертывание обычно завершается за 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”