Esta semana que paso he estado aplicándole pruebas unitarias a un simple http cloud function y ha sido un infierno, te explico la razón.
Online Test Mode
Google tiene 2 modos para que realices tus pruebas unitarias (todo esto está en la documentación que dejo en referencias):
- Online Mode: Dejas conectado el Firebase SDK para evitar agregarle complejidad al código de tus pruebas.
- Offline Mode: No te conectas a nada, pero debes falsificar las dependencias.
¿Qué solemos hacer en Unit Testing?
Probar solo una parte del código y falsificar dependencias, porque justo evitas conectarte con el resto de componentes como bases de datos y otros; justo el Offline Mode.
Por otro punto de vista, me agrada la idea del online mode; más que por remover la complejidad, me aseguro que los efectos alternos son los esperados. La unidad deja de ser solo tu código, es más un integration test pequeño.
Lastimosamente dependes de un proyecto adicional para probar, junto el archivo que te representa en Gcloud, supongo que solo hay que tener cuidado con el consumo.
La naturaleza de las pruebas en javascript
Deseo compartir un detallito que me dio claridad de la motivación detrás de Jest. Para explicar mi punto mejor vean la prueba a continuación:
En la línea 24 te esperarías que la función reciba un Request, resuelva y responda con un Response después del await, pero en este caso no puede ser así.
El HTTP Cloud Function es más como un Express (trabaja con muchísimos callbacks), en este caso debo de enviar el objeto Response previamente para poder escucharlo; es decir que recibes Request y Response.
Si no fuera por Jest y sus mocks, debería escribir el expect arriba de incluso la función (justo como está en el comentario) ... va en contra del modelo mental clásico.