Tools for testing Firebase backend features, using Jest.
Offers:
-
🥫 Emulator detection. The library automatically picks up the configuration when running the tests. Less boilerplate!
-
🪶 Light. Uses Firestore REST API so no Firebase client JS SDK is required.
This is an implementation detail. In practise, it means less npm dependencies.
-
⚡️ Fast. Optimized for multithreading and Node.js. You'll likely max out your cores.
This may be overpromising. The Firebase Emulators themselves are the bottleneck, and there's an issue for handling this. Anyways, we are pushing for speedy testability of Firebase backend.
-
‖‖‖ Security Rules are tested immutably - a passing write or delete operation does not change the data, and cannot disturb other tests. This is why we can parallelize the tests so much. No flaky tests.
-
👨🦯 Help functions for priming of Firestore with JSON data.
Firebase emulators provide binary import/export which is not very useful for small, hand-crafted datasets. JSON is more human friendly.
-
+
Means for testing callables (without a client SDK).
Only to be used with Jest 28 and above.
The aim for this repo is on ESM projects and Jest 28 brings this support. Thus the lack of interest for supporting even Jest 27 (it is possible, using some hacks - see release 0.0.4-alpha.5
).
-
Node 18
..because it has built-in
fetch
. If you really need Node 16 compatibility (undici needs Node >= 16.5), addimport { fetch } from 'undici'
to the sources. It will work. The author just didn't need Node 16 compatibility. -
Jest 28 as a peer dependency
In your application project:
$ npm install --save-dev firebase-jest-testing@beta
With Docker Compose, your emulators are likely running under another host than the one running the Jest tests.
Set the EMUL_HOST
env.var. to indicate the host name.
services:
emul:
...
sample:
...
environment: ['EMUL_HOST=emul']
- GroundLevel-firebase-es
packages/backend
subpackage is customer #0.
If you find the library useful, you may file a PR for adding a link to your project here. 😊
Writing tests walks you through the API.
- Testing Security Rules
- Testing Cloud Functions events and callables
- Priming with JSON data
- Why immutability matters ..and a bit about implementation
If you wish to support the development of this software, be in touch with the author. We'll figure out something nice! ;)