web-dev-qa-db-fra.com

ReferenceError: Vous essayez d'importer un fichier après la destruction de l'environnement Jest

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)

Lien pour repl

https://repl.it/repls/PartialGrimyMetadata

Environnement:

  • OS: Linux 4.14
  • Noeud: 6.14.2
  • Fil: 1.7.0
  • npm: 3.10.10
  • Watchman: introuvable
  • Xcode: N/A
  • Android Studio: introuvable
12
nrion

OK, j'ai trouvé une solution.

Devrait utiliser jest.useFakeTimers()

15
nrion

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.

Sinon, le compteur d'utilisation interne ne sera pas réinitialisé.

0
TARJU