Utilisation des minuteries factices
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()
})
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.