Yeda AI Tips · #076

English

Mezcla el orden de tu suite de tests para exponer tests dependientes del orden

Mezcla tus tests y míralos fallar. Si una suite solo pasa en un orden específico, no está probando tu código: está probando un accidente. El estado compartido oculto entre tests es una de las principales causas de builds inestables, y permanece invisible hasta que algo cambia el orden de ejecución: un archivo nuevo, un worker en paralelo, una máquina de CI. Aleatorizar el orden a propósito hace aparecer esas fallas en tu máquina, hoy, en lugar de como un build rojo aleatorio el mes que viene.

Por qué la dependencia del orden se esconde tan bien

En un orden fijo, el test B siempre corre después del test A — así que B hereda en silencio lo que A dejó atrás: un singleton cacheado, un objeto a nivel de módulo mutado, una fila que quedó en la base de datos de prueba, una variable de entorno que nadie limpió. Cada corrida local repite el mismo orden, así que cada corrida local está en verde. Luego CI divide la suite entre workers, o alguien agrega un archivo que ordena antes, y la dependencia se rompe. La falla parece aleatoria; la causa nunca lo fue.

La solución para la detección está a un flag de distancia: haz que el orden aleatorio sea el predeterminado, para que cualquier acoplamiento nuevo falle de inmediato, mientras el commit culpable todavía está arriba.

El flag de shuffle en tu runner

RunnerShuffleReproducir un orden que falla
Vitest--sequence.shuffle.tests (archivos: --sequence.shuffle.files)--sequence.seed <n>
Jest--randomize (runner jest-circus; imprime el seed)--seed=<n>
pytestinstala pytest-randomly — mezcla automáticamente--randomly-seed=<n> o --randomly-seed=last
Gogo test -shuffle=on (seed del reloj, se reporta en la salida)go test -shuffle=<N>
RSpec--order rand--seed 123 (igual que --order rand:123)

Cada uno imprime o acepta un seed. Ese es todo el flujo: el shuffle encuentra la falla, y el seed la reproduce de forma determinista mientras depuras.

# Vitest: shuffle tests, then replay the exact failing order
vitest run --sequence.shuffle.tests
vitest run --sequence.shuffle.tests --sequence.seed 1734

# pytest with pytest-randomly: rerun the last recorded seed
pytest --randomly-seed=last

Arregla el estado, no el orden

Cuando una corrida mezclada falla, resiste la tentación de fijar el orden de nuevo. La falla te está diciendo que dos tests comparten estado. Soluciones típicas:

Notas para usuarios avanzados

Haz de la independencia del orden una regla, no una esperanza — una suite que pasa en cualquier orden es una suite que puedes paralelizar, dividir y en la que puedes confiar.

Recursos

¿Construyendo un flujo de ingeniería asistido por IA? Yeda AI diseña, audita y entrega sistemas LLM de producción.

Habla con nosotros · Más tips · Read in English