React NativeのAnimated
コンポーネントを利用するコンポーネントがあります。コンポーネントのonPress
をシミュレートするテストケースの作成を開始しました。これは、Animated.timing
、およびsetState
。
jest
の実行は正常に動作しますが、テストの実行が停止することはなく、以前に記述した無関係なテストケースの1つが(以前に合格した)合格することはありません。
ランニング jest --watch
、このエラーが表示されます。
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、解決策を見つけました。
jest.useFakeTimers()
を使用する必要があります
上記のことを理解することは非常に重要です
jest.useFakeTimers()は、setTimeoutおよびその他のタイマー関数をモック関数でモックアウトします。
1つのファイルまたは記述ブロック内で複数のテストを実行する場合、jest.useFakeTimers();各テストの前に手動で呼び出すか、beforeEachなどのセットアップ関数を使用して呼び出すことができます。