Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.1K
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda