Melhores Práticas de Teste
Um resumo condensado das 25 melhores práticas mais importantes, extraídas de todas as páginas desta seção.
Busque em todas as páginas da documentação
Um resumo condensado das 25 melhores práticas mais importantes, extraídas de todas as páginas desta seção.
Siga a pirâmide de testes: Muitos testes unitários e de componente rápidos, menos testes de integração, E2E mínimo - E2E pertence apenas aos caminhos críticos.
Use jest-expo como preset: Alinha transformações e mocks com o Expo SDK 57 - a configuração Jest personalizada de tutoriais da web falha em imports nativos.
Centralize a configuração em jest.setup.ts: Matchers, mocks do reanimated e stubs do NetInfo vivem em um só lugar - não copiados por arquivo de teste.
Corrija transformIgnorePatterns quando pacotes falharem: Opte por node_modules específicos para transpilação - documente a lista ao adicionar dependências com muitas funcionalidades nativas.
Simule nas fronteiras de serviço: Simule api/client, não todos os módulos expo-* - simular demais esconde bugs de integração.
Evite falsa confiança de mocks vazios: jest.mock('expo-camera', () => ({})) permite que os testes passem enquanto a produção falha - retorne formas realistas.
Consulte como os usuários fazem: A prioridade da RNTL é role, label, depois texto - testID é um recurso de escape, não o padrão.
Use userEvent em vez de fireEvent: Sequências de pressionamento correspondem à interação real - fireEvent ignora acessibilidade e caminhos de tempo.
Aguarde UI assíncrona com findBy ou waitFor: Asserções imediatamente após press falham em dispositivos móveis - rede e animações precisam de matchers assíncronos.
Teste apresentadores sem provedores quando possível: Componentes puramente props-in JSX-out rodam em milissegundos - reserve MSW para testes de integração.
Snapshot apenas primitivas estáveis: Botões e badges, não telas inteiras - o churn de snapshot treina equipes a aprovar clicando.
Coloque os testes ao lado do código fonte: Button.test.tsx ao lado de Button.tsx - pastas __tests__ distantes param de ser atualizadas.
Execute testes em CI em cada PR: npm test -- --ci com cobertura opcional - testes apenas locais não escalam além de cinco engenheiros.
Separe scripts de unidade e de contrato: test:contract para fixtures Zod - sinal rápido sem iniciar o aplicativo completo.
Teste de contrato de respostas de API com Zod: Schemas compartilhados entre cliente e testes - mudanças na forma do backend falham na CI antes do QA.
Adicione Pact quando várias equipes são donas de APIs: Contratos orientados pelo consumidor complementam testes de schema - use quando mobile e backend lançam independentemente.
Comece com Maestro usando três fluxos de smoke: Lançamento, login e aba principal - fluxos YAML são baratos de manter em comparação com Detox para muitas equipes.
Fixe appId no Maestro para o identificador do bundle: appId incorreto lança o binário errado silenciosamente - corresponda a app.config ios.bundleIdentifier / android.package.
Execute Maestro em artefatos de build EAS na CI: Fluxos contra binários semelhantes aos de lançamento - Expo Go não é um substituto para submissão à loja.
Alcance o Detox quando a sincronização for o bug: Sincronização gray-box ajuda fluxos com muitos gestos - aceite o custo de configuração da build nativa.
Use Storybook para estados visuais, não navegação: Catalogue variantes de carregamento/erro/vazio - Storybook no dispositivo é melhor que capturar telas de produção.
Proteja o Storybook com STORYBOOK_ENABLED: Troque a entrada apenas em desenvolvimento - bundles de produção não devem enviar rotas do storybook.
Política de falha: corrigir ou quarentenar: E2E quarentenados devem ter dono e expiração - loops de retentativa escondem bugs do produto.
Teste caminhos offline e de modo avião: Mocks do NetInfo em testes unitários; verificação em dispositivo real antes do lançamento - usuários de celular perdem sinal constantemente.
Checklist pré-submissão: Unidade + componente verdes, Maestro de smoke em dispositivo físico, testes de contrato e fluxos manuais de pagamento/permissão uma vez por RC.
renderRouter do RNTL para testes de integração em pilhas críticas.Versões de Stack: Esta página foi escrita para React 19.2.3, React Native 0.86.0 e Expo SDK 57 (
expo~57.0.4).
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026