ReferenceError: вы пытаетесь "импортировать" файл после того, как среда Jest была снесена

У меня есть компонент, который использует компонент 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

Окружающая среда:

  • ОС: Linux 4.14
  • Узел: 6.14.2
  • Пряжа: 1.7.0
  • нпм: 3.10.10
  • Сторож: не найден
  • Xcode: N/A
  • Android Studio: не найден

Ответ 1

Хорошо, нашел решение.

Следует использовать jest.useFakeTimers()

Ответ 2

jest.useFakeTimers()

С учетом вышесказанного чрезвычайно важно понимать это

jest.useFakeTimers() выводит setTimeout и другие функции таймера с помощью фиктивных функций.

Если выполняется несколько тестов внутри одного файла или блока описания, jest.useFakeTimers(); можно вызывать перед каждым тестом вручную или с помощью функции настройки, например beforeEach.

В противном случае внутренний счетчик использования не будет сброшен.