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

1.1K
Vistas
Prueba de reacción de broma: verificar el estado después del retraso

Estoy realmente confundido tratando de crear una prueba con la ayuda de la documentación de Jest https://facebook.github.io/jest/docs/timer-mocks.html#content

Estoy tratando de verificar un estado cuando el contenedor se monta y luego, unos segundos más tarde, después de haber establecido manualmente los valores en el estado (usando setTimeout()).

Tengo una función dentro del componenteDidMount de Main como esta:

 componentDidMount() { this.setStateAfterDelay(); }

Y lo que hace la función es:

 setStateAfterDelay = () => { setTimeout(() => { this.setState({ fruits: ['banana', 'apple', 'orange', 'vodka', 'kiwi'] }); }, 1500); }

Logré la primera parte con:

 const component = mount(<Main />); expect(component.state().fruits).toEqual(null);

Pero no tengo idea de cómo verificar el estado nuevamente después de, digamos, 2000 ms.

Cualquier ayuda es apreciada :)

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

mientras que jest puede ejecutar código asíncrono fácilmente, puede usar la combinación de promesa y setTimeout para esperar un poco. Por ejemplo, este código esperará 2 segundos:

 await new Promise((r) => setTimeout(r, 2000));

Prueba de muestra completa. No olvide agregar un indicador async antes de la función de devolución de llamada:

 test('some test title', async () => { const foo = true; await new Promise((r) => setTimeout(r, 2000)); expect(foo).toBeDefined(); });

Además, tenga en cuenta que el "tiempo de espera" predeterminado es de 5 segundos (5000 ms). Si su prueba puede durar más, puede agregar jest.setTimeout(30000); encima de la test() . 30000 se asegurará de que no se agote el tiempo de espera durante 30 segundos. Puedes agregar cualquier número que necesites. Ejemplo completo con setTimeout:

 jest.setTimeout(30000); test('some test title', async () => { const foo = true; await new Promise((r) => setTimeout(r, 2000)); expect(foo).toBeDefined(); });
over 4 years ago · Santiago Trujillo Denunciar

0

Realmente no he probado este código. Pero, creo que algo similar a esto debería funcionar.

 const fruits = ['banana', 'apple', 'orange', 'vodka', 'kiwi']; it('mock setTimeout test', () => { jest.useFakeTimers(); setTimeout(() => { expect(component.state().fruits).toEqual(fruits); }, 1500); jest.runAllTimers(); });
over 4 years ago · Santiago Trujillo Denunciar

0

No necesita retrasar sus pruebas, simplemente llame a jest.runAllTimers() antes de afirmar, funcionará.

 const fruits = ['banana', 'apple', 'orange', 'vodka', 'kiwi']; it('initializes the fruits state', () => { jest.useFakeTimers(); jest.runAllTimers(); expect(component.state().fruits).toEqual(fruits); });

También puede llamar a useFakeTimers() en beforeEach si va a probar varias veces y también runAllTimers() podría estar dentro de otro beforeEach para que no se repita.

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