Hace unos días estaba terminando de ejecutar todas mis pruebas unitarias con Jest; pero como cualquier desarrollador, corría las pruebas 1 a 1 para ir debuggeando y que todo funcionara.
Nudo narrativo
De repente ejecuto npm test para revisar que todas las pruebas corrieran y me encuentro con anomalías en mis hooks de beforeEach como escritura y lecturas de Firestore extraños, no lograba entender la razón de ello.
Antes de que cada prueba se ejecute (o sea el beforeEach hook):
- Inicializo mi proyecto de Firebase para pruebas
- Se borra las colecciones en Firestore
- Les crea la estructura y finalmente agrega una data inicial
En otras palabras creo el setup o el estado inicial para comprobar con data limpia y que no tenga afectaciones por las pruebas anteriores.
Desenlace
Pero no me había percatado que al tu ejecutar el comando jest solito, Jest toma un pool de procesos hijos para ejecutar tus pruebas en paralelo y mis pruebas debían ser secuenciales porque tengo un punto común del cual dependo, Firestore y el proyecto de Firebase...
Moraleja
Si vas a hacer integration test o tu estrategia es enfocada a utilizar componentes reales de tu infraestructura (una base de datos en Docker por ejemplo), debes usar runInBand al probar con jest
De hecho pregunté en stackoverflow y nadie supo xD o no quisieron ayudar e.e!