Timeout na execução dos Testes E2E
WillianAgostini opened this issue · comments
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
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
@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.
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
?
Propus uma nova solução, veja no PR #571