Cloud Functions — Create, Test, Deploy
How to setup, test, and continuously deploy Firebase Cloud Function v1.0
All code show is available in this git repository. As always feel free to contribute, steal, or do nothing; your choice ;)
So Firebase recently released version 1 of their Cloud Functions. This came with some breaking changes; for those of you that were using Firebase Cloud Functions prior to v1.
It also came with a nice little unit test suite; which totally beats copying and pasting the unit test mocks from the Google Cloud GitHub ;) So lets dive in…
What’s on tap…
- Two — Firebase Authentication Triggers
- One — Cloud Pub/Sub Trigger
- Five — Firebase Cloud Function Unit Tests
- One — Google Cloud Automated Build Trigger
Setup
Firebase suggests you develop locally with Node.js v.6.11.5, but since we are going to write everything in TypeScript and let the transpiler do magic we will use Node.js LTS v8.10.0. It works…no worries :)
Clone the git repo:
git clone git@github.com:jeremylorino/firebase-functions-unittest-cd.git
Install Node.js dependencies
npm install
Get some Google Cloud service account credentials
Authenticate with Firebase CLI
Initialize the project directory
Be sure to select your Firebase project from the list
- Select TypeScript from the language prompt
- Yes to TSLint
- NO to all the “Overwrite” questions
- Yes to install dependencies
Then test it!
npm test
Now what did we just do?
Lets dig into one of the function definitions…
This little snippet is one of the two Firebase Authentication Triggers. When a new Firebase User is created it writes the user’s info to a Firestore document along with a document that will hold the effective permissions for user access control.
Then we have its associated unit test.
- Line 3–9: mock Firebase UserRecord
- Line 11–12: execute the userCreate function with the mock UserRecord
- Line 17–28: assert the function executed as expected
Now for some continuous deployment
First we will need a Firebase CI token
npm run firebase:citoken
- Navigate to Build Triggers
- Connect to git repo
- Set ‘Build Configuration’ to use the cloudbuild.yaml
- Set the value of _FIREBASE_TOKEN to what was received from the above command