DEV Community

Kairox
Kairox

Posted on

Testando Fluxos de Verificação por SMS Sem Queimar Números de Telefone Reais

Todo projeto que envolve autenticação via telefone acaba esbarrando no mesmo problema chato: como testar isso de verdade? Você não pode ficar digitando seu próprio número toda vez que roda um fluxo de cadastro. Definitivamente não deveria pedir para os colegas de equipe cederem o deles. E a maioria dos pipelines de CI não tem uma pessoa sentada ali, pronta para ler uma mensagem de texto e digitar o código num formulário.

É uma daquelas coisas que parecem pequenas até você estar três sprints dentro de um projeto com 2FA via SMS e perceber que a cobertura de teste desse fluxo inteiro é "testei uma vez, manualmente, antes do almoço".

Por Que a Verificação por Telefone É Complicada de Testar

A maioria dos fluxos de autenticação de um stack típico é fácil de automatizar. Verificação por e-mail, dá para interceptar com uma caixa de entrada de teste ou um serviço de captura de e-mails. Tokens de sessão, dá para mockar. Redefinição de senha, você controla o loop inteiro.

O SMS quebra esse padrão porque o código precisa sair completamente do seu sistema, ser entregue por uma rede de telecomunicação real e voltar antes que o teste possa continuar. Essa ida e volta introduz vários pontos de falha que não têm nada a ver com o seu código: atrasos de operadora, filtros de spam, peculiaridades de entrega por região, limites de taxa. Se você já viu um pipeline de CI falhar numa etapa de verificação por telefone e depois passar numa nova tentativa sem nenhuma mudança de código, é quase sempre por causa disso.

O instinto de muitas equipes é pegar um número público gratuito de um dos vários sites de "receber SMS online" para checagens manuais rápidas. Isso funciona bem para uma verificação pontual. Mas desmorona rápido quando você tenta automatizar, porque esses números são compartilhados potencialmente por milhares de outras pessoas usando o mesmo pool. Códigos podem se perder numa caixa de entrada lotada, o próprio número pode já estar bloqueado pela plataforma que você está testando, e não existe forma programática de ler as mensagens recebidas — você fica preso atualizando uma página manualmente.

Uma Configuração Melhor: Números Virtuais Dedicados por Contexto de Teste

A solução para a qual a maioria das equipes acaba migrando é provisionar números virtuais dedicados especificamente para testes — separados de qualquer coisa usada em produção, e separados da linha pessoal de qualquer um.

Alguns padrões que realmente funcionam na prática:

Um número por ambiente, não por execução de teste. Criar um número novo para cada teste individual é exagero e, muitas vezes, custo desnecessário. Um número dedicado por ambiente (staging, QA, uma branch de feature específica se você estiver testando algo arriscado) costuma ser suficiente, já que você controla o fluxo e não tem os problemas de colisão que teria num número público compartilhado.

Acesso programático às mensagens recebidas. É essa parte que realmente destrava a automação. Se o seu provedor de números virtuais expõe uma API ou webhook para ler o SMS recebido, sua suíte de testes pode fazer polling ou escutar o código em vez de depender de uma pessoa copiando da tela. É a diferença entre "testamos isso manualmente antes de cada release" e "isso faz parte da rotina normal de CI".

Números específicos por região para bugs específicos de região. A formatação de número de telefone é, surpreendentemente, uma fonte comum de bugs em produção — uma regex de validação que funciona para números dos EUA mas trava num formato do Reino Unido ou do Brasil, por exemplo. Testar contra números das regiões que você realmente atende pega esse tipo de problema antes que um usuário real o encontre.

Não deixe números de teste hardcoded a longo prazo. É tentador fixar um número de teste que funciona assim que você encontra um bom, mas números são reciclados, reatribuídos ou descontinuados pelos provedores. Trate-os como qualquer outro valor de configuração — variável de ambiente, não uma string mágica enterrada num arquivo de teste.

Onde Isso Se Torna Realmente Útil Além dos Testes

Depois que um projeto tem números virtuais dedicados integrados para testes, essa mesma estrutura costuma ser reaproveitada em outros lugares. Ambientes de demonstração se beneficiam de um número estável que sempre funciona, em vez de quem estiver apresentando ficar tentando receber um código no próprio celular na frente de um cliente. Equipes de suporte e QA que verificam relatos de bugs envolvendo fluxos de SMS conseguem reproduzir problemas sem precisar usar o número de um cliente real. E para quem está construindo um SaaS multi-tenant com verificação por telefone embutida no onboarding, ter números específicos por região à mão facilita bastante validar a experiência para clientes fora do mercado de origem.

Se você está configurando isso pela primeira vez, provedores como o NumeroVirtual valem a pena conhecer — o atrativo para um fluxo de trabalho de desenvolvimento especificamente é ter números de vários países disponíveis sob demanda, sem que cada número de teste vire um compromisso de longo prazo ou seja sinalizado como acontece com números públicos usados em excesso.

O Ponto Central

Verificação por telefone é um daqueles fluxos fáceis de subtestar porque não se encaixa direito no playbook usual de mocking e stubbing. Mas o ajuste não é complicado — é basicamente uma questão de não tratar o "SMS" como uma exceção à disciplina normal de testes. Dê a ele um número dedicado e acessível programaticamente, mantenha-o separado de qualquer coisa pessoal ou voltada à produção, e ele se torna só mais uma parte da suíte, em vez daquele fluxo que todo mundo silenciosamente evita testar direito.

Top comments (0)