Jest: Cuando fallar rápido es la estrategia inteligente
3 min de lectura

Jest: Cuando fallar rápido es la estrategia inteligente

567 palabras

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 falle
  • bail: 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