Ответ 1
Хорошо, нашел решение.
Следует использовать jest.useFakeTimers()
У меня есть компонент, который использует компонент Animated
из реактивной системы. Я начал писать тестовый пример для имитации onPress
компонента, который вызывает функцию с Animated.timing
и setState
.
Выполнение jest
работает нормально, но тесты никогда не прекращаются, и один несвязанный тестовый пример, который я написал ранее, кажется, никогда не проходит (который прошел раньше).
работает 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
Хорошо, нашел решение.
Следует использовать jest.useFakeTimers()
С учетом вышесказанного чрезвычайно важно понимать это
jest.useFakeTimers() выводит setTimeout и другие функции таймера с помощью фиктивных функций.
Если выполняется несколько тестов внутри одного файла или блока описания, jest.useFakeTimers(); можно вызывать перед каждым тестом вручную или с помощью функции настройки, например beforeEach.