Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

8.9K
Views
ReferenceError: Estás intentando `importar` un archivo después de que el entorno Jest haya sido derribado

Tengo un componente que utiliza el componente Animated de React Native. Comencé a escribir un caso de prueba para simular onPress de un componente, que llama a una función que tiene Animated.timing y setState .

ejecutar jest funciona bien, pero las pruebas nunca dejan de ejecutarse, y un caso de prueba no relacionado que he escrito antes parece que nunca pasa ahora (que pasó antes).

ejecutando jest --watch , aparece este error:

 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)

Enlace para replicar

https://repl.it/repls/PartialGrimyMetadata

Medioambiente:

  • Sistema operativo: Linux 4.14
  • Nodo: 6.14.2
  • Hilo: 1.7.0
  • npm: 3.10.10
  • Vigilante: no encontrado
  • Código X: N/A
  • Android Studio: no encontrado
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Bien, encontré una solución.

Debería usar jest.useFakeTimers()

Nota: Coloque el código de arriba justo después de la sección de import en su archivo de prueba.

over 4 years ago · Santiago Trujillo Report

0

jest.useFakeTimers()

Con lo anterior, es extremadamente importante entender esto.

jest.useFakeTimers() se burla de setTimeout y otras funciones de temporizador con funciones simuladas.

Si ejecuta varias pruebas dentro de un archivo o describe un bloque, jest.useFakeTimers(); se puede llamar antes de cada prueba manualmente o con una función de configuración como beforeEach.

De lo contrario, el contador de uso interno no se restablecerá.

over 4 years ago · Santiago Trujillo Report

0

Me gustaría contribuir a la respuesta.

Bueno, veamos el mensaje de error.

ReferenceError: You are trying to 'import' a file after the Jest environment has been torn down.

Derribado significa: Jest ya terminó de ejecutarse y una parte de su código está tratando de ejecutarse después de que Jest derribó o salió de su prueba. Esto es bastante común en Javascript debido a su naturaleza asíncrona.

A veces sucede después de que se ejecuta una devolución de llamada de promesa, por ejemplo:

 import { someProcess} from 'a-library' task.job().then(result => { someProcess(result) })

En el ejemplo anterior, el código importa someProcess de a-library

Si el job del método del objeto de la task tarda más que la ejecución de jest, su devolución de llamada (invocación de then()) se ejecutará fuera de jest porque jest ha continuado. Por lo tanto, cuando se ejecuta someProcess , se cargará desde a-library por lo que jest se quejará de que está intentando cargar una biblioteca después de que jest se haya roto.

La respuesta marcada como la solución es parcialmente correcta porque llamar a jest.useFakeTimers() evitará que su código espere los n segundos que se supone que debe esperar llamando a setTime o similares haciendo que su código se sincronice artificialmente

Hacer que su prueba await esas llamadas de método lo ayudaría a comprender mejor su código.

El código que funcionó para mí fue

 describe("Some test set " , ()=>{ let heavyWorkinService = library.workingService(); // We are marking the test function call as async test(("Name of the test"), async ()=>{ // we are awaiting heavyWorkingService to done its job await hevyWorkingService("some data") }) })

En mi escenario real, mi código estaba obteniendo datos de async , porque no estoy usando simulacros para esta prueba, estaba tratando de importar await después de que .

Por supuesto, hay muchas maneras de lidiar con este error, ¡solo quería que supiera la verdadera razón detrás de este error para que pueda trabajar en la solución correcta para sus pruebas!

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!