Síntoma: en staging /fires no pintaba teselas ni fuegos, no creaba la suscripción `activefiresmyloc` y se quedaba con "Actualizando…" para siempre. Se había atribuido a que el navegador de las pruebas no compone; no era eso. El mismo navegador pinta la portada, y pinta /fires perfectamente contra un servidor local. La diferencia era la clave de Google. `DefMapLayers` montaba el control de capas con dos capas base (OSM color y gris) y, cuando `Gkeys` resolvía la clave, volvía a renderizar añadiendo tres capas de Google. En esa segunda pasada react-leaflet se dejaba por el camino la capa base marcada, y el mapa se quedaba sin ninguna. En desarrollo no hay clave, así que la segunda pasada no añadía nada y el bug no se veía nunca. El control se monta ahora una sola vez, con la lista de capas ya cerrada, y con un tope de 5 s por si el script de Google no llega: las capas de Google son un extra, el mapa tiene que salir igual. Reproducido en local poniendo una clave falsa en settings-ci.json (0 teselas antes del arreglo, 15 después). Esa clave falsa se queda ahí a propósito, para que la suite e2e recorra el mismo camino que staging y producción, y e2e/tests/fires-map.spec.js lo fija: teselas, una única capa base marcada, suscripción por viewport, y que no se quede en "Actualizando…". 16 tests e2e en verde. |
||
|---|---|---|
| .. | ||
| support | ||
| tests | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.js | ||
| README.md | ||
| seed.js | ||
| staging-qa.mjs | ||
Suite e2e (Playwright)
Cubre en navegador los flujos que la suite de servidor no puede ver: registro y
acceso, alta y baja de una zona desde el mapa, que la unión de zonas se pinte
en /subscriptions y en /zones, comentario en el detalle de un fuego, y cambio
de idioma.
El motivo de que exista: el 2026-07-30 suscribirse a una zona congeló staging (la unión bloqueaba el event loop y DDP dejaba de responder). Ningún test de servidor habría visto eso — el navegador sí.
⚠️ Contra qué se puede correr
Solo contra un stack desechable: docker-compose.e2e.yml o un servidor de
desarrollo local. La siembra (e2e/seed.js) borra colecciones, y los tests
crean usuarios y zonas. playwright.config.js se niega a arrancar si
E2E_BASE_URL apunta a testfuegos.comunes.org o a los dominios de producción.
Uso
Stack efímero completo (lo mismo que hace el CI):
docker compose -f docker-compose.e2e.yml up -d --build
npm --prefix e2e ci
npx --prefix e2e playwright install --with-deps chromium
E2E_BASE_URL=http://localhost:3300 npm --prefix e2e test
docker compose -f docker-compose.e2e.yml down -v
Contra un servidor de desarrollo (ciclo rápido mientras se escriben tests):
docker run -d --name tcef-e2e-mongo -p 27021:27017 --tmpfs /data/db mongo:7 --replSet rs0 --bind_ip_all
docker exec tcef-e2e-mongo mongosh --quiet --eval 'rs.initiate({_id:"rs0",members:[{_id:0,host:"localhost:27017"}]})'
docker cp e2e/seed.js tcef-e2e-mongo:/tmp/seed.js && docker exec tcef-e2e-mongo mongosh --quiet fuegos /tmp/seed.js
export PATH="$HOME/.meteor:$PATH"
MONGO_URL='mongodb://localhost:27021/fuegos?replicaSet=rs0&directConnection=true' \
MONGO_OPLOG_URL='mongodb://localhost:27021/local?replicaSet=rs0&directConnection=true' \
ROOT_URL=http://localhost:3100 meteor --settings settings-ci.json --port 3100
npm --prefix e2e test # E2E_BASE_URL por defecto: http://localhost:3100
Ver el informe del último fallo: npm --prefix e2e run report.
Dependencias externas
El navegador carga las teselas de CartoDB y el script de Google Maps (el
autocompletado de lugares). El runner necesita salida a internet; sin ella los
mapas no llegan a pintarse y los tests de zona fallan. La clave de Google puede
ir vacía: Gkeys ya no se queda esperándola.
Lo que la suite documenta como roto
i18n.spec.js deja un test.fixme para un bug real: el idioma elegido en el
perfil no sobrevive a una recarga (se guarda en la cuenta y se aplica al
iniciar sesión, pero al recargar vuelve al idioma del navegador). Está ahí para
que aparezca en cada ejecución en vez de perderse en una nota.