Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(BSR) chore(jest): use fake timers by default #3909

Closed
wants to merge 1 commit into from

Conversation

voisinhugo
Copy link
Contributor

https://jestjs.io/fr/docs/26.x/timer-mocks

Cf. guilde Test de BAM :

On ne veut pas que ces fonctions dépendent du temps pour plusieurs raisons :

  • Ca induit un risque de tests non déterministes (flaky tests). En effet, si ces fonctions dépendent du temps, alors selon le temps d’exécution du test on pourrait avoir certains callbacks appelés dans des setTimeout par exemple qui pourraient être appelés ou non.
  • Pour réduire le temps des tests : si le temps des timers est long, on n’a pas envie d’attendre qu’ils soient finis autrement on aurait des tests trop long
  • Pour que tous les process en cours soient terminés quand on quitte le test : si ce n’est pas le cas, Jest va print un warning nous disant qu’un des process n’est pas terminé et qu’il n’a pas pu quitter normalement. Ca peut causer des problèmes au niveau du temps d’exécution d’une suite de tests, voire potentiellement d’isolation des tests

Warning: L’utilisation de fake timers peut causer des problèmes lorsque l’on utilise rntl (react-native-testing-library) : si vous utiliser des fake timers modern, alors waitFor va systématique timeout, ainsi que tous les utilitaires asynchrones de la librairie. C’est expliqué dans la documentation de rntl.

We generally advise to use the "react-native" preset when testing with this library. However, if you use "modern" Fake Timers (default since Jest 27), you'll need to apply our custom Jest preset or awaiting promises, like waitFor, will timeout.

This is a [known issue](facebook/react-native#29303). It happens because React Native's Jest preset overrides native Promise. Our preset restores it to defaults, which is not a problem in most apps out there.

Pour corriger ce problème, il faut soit utiliser des fake timers legacy, soit appliquer le preset de rntl

@voisinhugo voisinhugo closed this Jan 9, 2023
@voisinhugo voisinhugo deleted the BSR-use-fake-timers-by-default branch August 9, 2023 10:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant