J'ai un composant qui utilise le composant Animated
de react native. J'ai commencé à écrire un scénario de test pour simuler onPress
d'un composant, qui appelle une fonction qui a Animated.timing
et setState
.
l'exécution de jest
fonctionne très bien, mais les tests ne s'arrêtent jamais, et un scénario de test sans rapport que j'ai écrit auparavant ne semble jamais réussir maintenant (qui a réussi auparavant).
fonctionnement jest --watch
, J'obtiens cette erreur:
ReferenceError: You are trying to `import` a file after the Jest environment has been torn down.
at Function.bezier (node_modules/react-native/Libraries/Animated/src/Easing.js:113:21)
at ease (node_modules/react-native/Libraries/Animated/src/Easing.js:34:24)
at TimingAnimation._easing (node_modules/react-native/Libraries/Animated/src/Easing.js:133:18)
at TimingAnimation.onUpdate (node_modules/react-native/Libraries/Animated/src/animations/TimingAnimation.js:107:45)
RUNS src/__tests__/SlideDownMenu.test.js
/home/nrion/Desktop/mobile-ui/PriceInsight_app/node_modules/react-native/Libraries/Animated/src/Easing.js:114
return _bezier(x1, y1, x2, y2);
^
TypeError: _bezier is not a function
at Function.bezier (/home/nrion/Desktop/mobile-ui/PriceInsight_app/node_modules/react-native/Libraries/Animated/src/Easing.js:224:12)
at ease (/home/nrion/Desktop/mobile-ui/PriceInsight_app/node_modules/react-native/Libraries/Animated/src/Easing.js:94:21)
at TimingAnimation._easing (/home/nrion/Desktop/mobile-ui/PriceInsight_app/node_modules/react-native/Libraries/Animated/src/Easing.js:255:16)
at TimingAnimation.onUpdate (/home/nrion/Desktop/mobile-ui/PriceInsight_app/node_modules/react-native/Libraries/Animated/src/animations/TimingAnimation.js:138:14)
at ontimeout (timers.js:386:11)
at tryOnTimeout (timers.js:250:5)
at Timer.listOnTimeout (timers.js:214:5)
https://repl.it/repls/PartialGrimyMetadata
OK, j'ai trouvé une solution.
Devrait utiliser jest.useFakeTimers()
Avec ci-dessus, il est extrêmement important de comprendre cela
jest.useFakeTimers () simule setTimeout et d'autres fonctions de temporisation avec des fonctions de simulation.
Si vous exécutez plusieurs tests à l'intérieur d'un fichier ou décrivez un bloc, jest.useFakeTimers (); peut être appelé avant chaque test manuellement ou avec une fonction de configuration telle que beforeEach.