BrasilAPI / BrasilAPI

Vamos transformar o Brasil em uma API?

Home Page:https://brasilapi.com.br

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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