Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

8.9K
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda