Cenário: um teste que passa e falha sem o código mudar
Pergunta
Um teste na CI passa numa execução e falha na seguinte, sem nenhuma mudança de código. Como você investiga e quais são as causas mais comuns?
Resposta esperada
Primeiro, torne o flaky reproduzível: rode o teste isolado e em loop, e rode a suíte em ordem aleatória. Causas mais comuns: (1) estado compartilhado entre testes — um teste deixa dados no banco/variável global e outro depende disso; (2) tempo — sleeps fixos, asserção sobre 'agora', timezone; (3) assíncronia — a asserção roda antes da promise/callback resolver, faltando await ou um wait-for adequado; (4) ordem de execução ou paralelismo batendo no mesmo recurso; (5) dependência de rede/serviço externo não mockado. A correção certa é remover a fonte de não-determinismo, não colocar retry — retry esconde flaky que às vezes é bug real de concorrência no produto.
Por que perguntam isso
Pergunta de nível sênior. O sinal de alerta na resposta é 'eu adiciono retry' como primeira opção — bom candidato trata retry como último recurso e desconfia que o flaky expõe um race no produto.