Trabajando en proyectos grandes, es habitual tener suites de tests que pueden tardar varios minutos en ejecutarse. Y cuando uno de esos tests falla al principio de la ejecución, es frustrante esperar a que todos los demás se ejecuten para ver el resultado completo.
Jest incluye una funcionalidad que he encontrado muy útil en desarrollo: la opción bail
, que permite parar la ejecución de tests después de un número determinado de fallos. Es una de esas características que una vez la conoces y empiezas a usar, no entiendes cómo has vivido sin ella.
¿Por qué usar bail?
Durante el desarrollo, especialmente cuando estás refactorizando código o implementando cambios importantes, es común que varios tests fallen en cadena. En estos casos, no tiene mucho sentido ejecutar los 500 tests restantes si ya sabes que el primero está fallando por un error que has introducido.
La opción bail
te permite:
- Ahorrar tiempo durante el desarrollo al parar inmediatamente tras el primer fallo
- Centrarte en solucionar un problema antes de continuar
- Reducir el uso de recursos durante la ejecución de tests
Configuración en el archivo de configuración
Puedes configurar bail
directamente en tu archivo jest.config.js
:
// jest.config.js
module.exports = {
// Parar después del primer test que falle
bail: true,
// O especificar un número concreto de fallos
bail: 3,
// Resto de tu configuración...
testEnvironment: 'node',
collectCoverage: true
}
El comportamiento es bastante directo:
bail: true
parará tras el primer test que fallebail: 3
parará tras el tercer test que falle
Configuración desde línea de comandos
También puedes usar la opción directamente desde el CLI, lo que me resulta especialmente útil cuando quiero probar algo rápido:
{
"scripts": {
"test": "jest",
"test:bail": "jest --bail",
"test:bail-3": "jest --bail 3",
"test:dev": "jest --bail --watch"
}
}
Mi favorito es combinar --bail
con --watch
durante el desarrollo. De esta forma, en cuanto un test falla, Jest para inmediatamente y queda a la espera de cambios en los archivos para volver a ejecutar.
Mi flujo de trabajo con bail
En mi día a día, uso diferentes configuraciones según la situación:
Durante desarrollo activo:
npm run test:dev # --bail --watch
Para verificación rápida antes de commit:
npm run test:bail # --bail
En CI/CD:
npm test # Sin bail, para ver todos los errores
Cuándo NO usar bail
Es importante entender que bail
no es siempre la opción correcta:
- En pipelines de CI/CD: Normalmente quieres ver todos los tests que fallan para tener una visión completa
- En revisiones de código: Ver todos los fallos te da mejor contexto del estado del código
- Tests de integración complejos: A veces un test puede fallar por timing y los siguientes ejecutarse correctamente
Una configuración práctica
Una configuración que me ha funcionado bien es tener diferentes archivos de configuración para diferentes escenarios:
// jest.config.dev.js
module.exports = {
...require('./jest.config.js'),
bail: true,
verbose: true,
watchAll: false
}
Y luego usar scripts específicos:
{
"scripts": {
"test": "jest",
"test:dev": "jest --config jest.config.dev.js --watch",
"test:ci": "jest --coverage --watchAll=false"
}
}
Esta opción bail
es una de esas pequeñas mejoras en el flujo de trabajo que realmente marcan la diferencia en el día a día. Especialmente cuando trabajas con grandes suites de tests, poder fallar rápido te permite iterar mucho más eficientemente durante el desarrollo.
NOTA: Recuerda que en entornos de producción o CI, normalmente querrás ejecutar todos los tests para tener una visión completa del estado del código, independientemente de cuántos fallen.
Comentarios