Aller au contenu principal

Utilisation des minuteries factices

[Traduction Bêta Non Officielle]

Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →

Dans certains cas, lorsque votre code utilise des minuteries (setTimeout, setInterval, clearTimeout, clearInterval), vos tests peuvent devenir imprévisibles, lents et instables.

Pour résoudre ces problèmes, ou si vous avez besoin de vous appuyer sur des horodatages spécifiques dans votre code, la plupart des frameworks de test proposent l'option de remplacer les minuteries réelles dans vos tests par des factices. Cela a un effet secondaire : lorsque vous utilisez des minuteries factices dans vos tests, tout le code à l'intérieur de votre test utilise des minuteries factices.

Le modèle courant pour configurer les minuteries factices se place généralement dans le beforeEach, par exemple :

// Fake timers using Jest
beforeEach(() => {
jest.useFakeTimers()
})

Comme les minuteries factices simulent les fonctions natives de minuterie, il est nécessaire de restaurer les minuteries après l'exécution de votre test, comme pour les mocks classiques. Cela empêche les minuteries factices de s'infiltrer dans d'autres cas de test et fonctions de nettoyage, où des minuteries réelles sont attendues.

Pour cela, vous appelez généralement useRealTimers dans le afterEach.

Il est important d'appeler également runOnlyPendingTimers avant de basculer vers les minuteries réelles. Cela garantit que vous videz toutes les minuteries en attente avant de passer aux minuteries réelles. Si vous ne faites pas avancer les minuteries et basculez simplement vers les minuteries réelles, les tâches planifiées ne seront pas exécutées et vous obtiendrez un comportement inattendu. Ceci est particulièrement important pour les bibliothèques tierces qui planifient des tâches à votre insu.

Voici un exemple de mise en œuvre avec jest :

// Running all pending timers and switching to real timers using Jest
afterEach(() => {
jest.runOnlyPendingTimers()
jest.useRealTimers()
})
note

Combiner des minuteries factices avec user-event peut provoquer des délais d'expiration de test. Consultez l'option advanceTimers pour éviter ce problème.