Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Timeout na execução dos Testes E2E #560

Open
WillianAgostini opened this issue Dec 1, 2023 · 4 comments · May be fixed by #571
Open

Timeout na execução dos Testes E2E #560

WillianAgostini opened this issue Dec 1, 2023 · 4 comments · May be fixed by #571

Comments

@WillianAgostini
Copy link
Contributor

Hoje, ao executarmos um PR, ocasionalmente os colaboradores podem ser afetados por erros nos testes devido a timeouts nas chamadas às APIs externas. Como uma possível solução para esse problema, apresento a seguinte configuração no Jest, que permite a realização de "retry" nas chamadas que resultaram em erro. Para mais detalhes, consulte o link do Stack Overflow fornecido abaixo.

Vale analisar se essa solução pode ser viável para esse problema.
https://stackoverflow.com/a/74991718

// jest.config.json
{
  setupFilesAfterEnv: ["<rootDir>/jest.setup.tsx"],
  
  ...

}
// jest.setup.tsx

... 

jest.retryTimes(5, { logErrorsBeforeRetry: true });

... // any other pre/post test logic
@lucianopf
Copy link
Member

lucianopf commented Dec 1, 2023

Boa ideia hein mestre! Tenho receios sobre o numero 5 pq acho que isso pode eventualmente engatilhar algum bloqueio de serviço externo mas colocar ao menos o retry de 3 já ajuda muito!

Obs: acho que da pra fazer direto dentro do jest.config.js logo

@WillianAgostini
Copy link
Contributor Author

@lucianopf
Para implementar esse recurso, será necessário atualizar a versão do Jest. Entretanto, o jest.retryTimes realizará uma nova chamada ao final da execução do último teste com falha. Porém essa abordagem ainda apresenta o risco de falhas devido à execução imediata.
Propus uma implementação de um PR jestjs/jest#14738 no repositório do Jest. Essa proposta inclui um novo atributo chamado waitBeforeRetry, projetado para aguardar um período predefinido antes da nova execução. Essa adição visa aumentar a probabilidade de sucesso nos testes, proporcionando uma pausa antes da tentativa subsequente.
Pretendo aguardar o merge desse PR e a publicação da versão para posteriormente discutirmos aqui quais os atributos de tempo de tentativa utilizarmos.

@WillianAgostini
Copy link
Contributor Author

WillianAgostini commented Dec 29, 2023

O PR foi aprovado; agora, é só aguardar o lançamento da versão. Veja como a implementação ficará:

const retryTimes =  ###; // Número desejado de tentativas
const awaitRetry = ####; // Tempo de espera desejado entre tentativas
jest.retryTimes(retryTimes, {logErrorsBeforeRetry: true, waitBeforeRetry: awaitRetry}});

test('will fail', () => {
  expect(true).toBe(false);
});

temos que definir @lucianopf quais serão as variáveis retryTimes e retryAwait para que fique adequado aos testes; Alguma sugestão para retryAwait?

@WillianAgostini
Copy link
Contributor Author

Propus uma nova solução, veja no PR #571

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants