Repaso
English
TestingIntermedioTST-08

¿Cómo pruebas de forma fiable código que depende de la hora actual?

Opciones

  1. Ejecutar el test solo a una hora concreta del día
  2. Inyectar un reloj, o congelar el tiempo con freezegun (Opción correcta)
  3. Añadir llamadas a time.sleep dentro del test
  4. Omitir esos tests cuando dependen del reloj

Respuesta

Inyectar un reloj (o una función now) como dependencia, o congelar el tiempo con una librería como freezegun / time-machine

Por qué

El código que llama a datetime.now() por dentro da resultados distintos en cada ejecución, así que los tests no pueden predecirlo (y pueden fallar a medianoche o a fin de mes).

Pasa la fuente de tiempo como parámetro, por ejemplo is_expired(token, now), para que los tests den una fecha fija. O congela el tiempo en el test con freezegun.

La misma idea se aplica a números aleatorios e IDs.

Recuerda

El tiempo es una dependencia: inyéctalo o congélalo.

Términos clave

Practica esta pregunta en Repaso