Tests
Correr todo
Sección titulada «Correr todo»bun test --preload ./test/setup.tsTres capas en una sola corrida:
| Capa | Qué cubre | DB |
|---|---|---|
Unitarios (test/unit/) |
Servicios, utils, lógica pura | No |
HTTP (test/http.test.ts) |
Rutas vía app.handle, validaciones, 4xx |
No |
E2E (test/e2e/) |
Flujos completos con Eden Treaty | Sí (pisa_api_test) |
Provisionar la DB de tests (una vez)
Sección titulada «Provisionar la DB de tests (una vez)»Los e2e truncan todas las tablas entre tests: la base es
desechable. El rol por defecto pisa no tiene CREATEDB, así que el
CREATE DATABASE va como superusuario:
podman exec mi_postgres psql -U postgres -d postgres \ -c "CREATE DATABASE pisa_api_test OWNER pisa;"
DATABASE_URL=postgresql://pisa:pisa_password@localhost:5432/pisa_api_test \ bun --bun ./node_modules/drizzle-kit/bin.cjs push
podman exec -i mi_postgres psql -U pisa -d pisa_api_test < src/db/triggers.sqltest/setup.ts fuerza DATABASE_URL y TEST_DATABASE_URL hacia esa
base (asignación forzada, no ??=, porque Bun auto-carga .env), así
que nunca toca tu base de desarrollo.
Correr solo una suite e2e
Sección titulada «Correr solo una suite e2e»env -u DATABASE_URL -u TEST_DATABASE_URL \ bun test --preload ./test/setup.ts test/e2e/reservas.test.tsDes-entornar las variables evita que una DATABASE_URL exportada en la
shell gane sobre la de tests.
Cómo están escritos los e2e
Sección titulada «Cómo están escritos los e2e»- Eden Treaty (
treaty<App>(app)) contra la instancia real: tipos end-to-end sin red. test/e2e/ayuda.tsaporta el harness:api,limpiarDB()(TRUNCATE … CASCADEde 23 tablas),adminBootstrap()idempotente,loginAdmin(),eventoBase()eimportarDos().- Los timers no se esperan: los jobs se disparan por su endpoint
HTTP con
x-cron-secret.
Trampas ya resueltas (no redescubrir):
.post()/.get()van directo sobre el recurso; segmentos dinámicos conapi.participantes({ id }).- El multipart (
t.File()) no lo infiere treaty: se usaapp.handle+FormData. t.Union(enum.enumValues.map(...))colapsa el tipo anever: en los schemas van tuplas explícitas det.Literal.- Rate limit alto solo en el proceso de test (
RATE_LIMIT_MAX=100000, asignación forzada enayuda.ts).
Verificación completa
Sección titulada «Verificación completa»bunx tsc --noEmit --moduleResolution bundler --module ES2022 --target ES2021 --strict --skipLibCheck --types bun-typesbunx biome lint ./srcbun test --preload ./test/setup.tsbunx drizzle-kit check