TESTES E2E COM REACT NATIVE E DETOX

Guilherme Augusto Steinmacher Bublitz
Aurum Tech
Published in
5 min readAug 14, 2020

--

TESTES E2E COM REACT NATIVE E DETOX

O INÍCIO

Desde que entrei na Aurum pude perceber que testes são uma parte crucial do processo de desenvolvimento. Os testes unitários sempre foram parte do nosso dia a dia, mas com o tempo fomos buscando outras maneiras de garantir a qualidade do código, e começamos a investir tempo em testes E2E.
Para implementar os testes End-to-End na Web foi utilizado Selenium e atualmente usamos o Cypress (é possível conferir como foi a mudança entre essas duas bibliotecas nesse post), mas ainda não tínhamos experimentado nenhuma opção em projetos mobile.

Sendo membro da equipe Astrea Mobile, não quis deixar nosso app de fora e comecei a pesquisar algumas opções no mercado, após um tempo encontrei o Detox, uma biblioteca de código aberto desenvolvida pelo pessoal do Wix. Como já utilizamos algumas ferramentas desenvolvidas por eles, como o react-native-navigation, resolvi estudar e implementar em nosso projeto.

INSTALAÇÃO

CONFIGURANDO O AMBIENTE

Aqui vamos seguir as configurações para o MacOS, por isso utilizamos o homebrew em algumas etapas do processo. Importante checar algumas informações antes de começarmos:

  • MacOS High Sierra 10.13.16 ou superior
  • Xcode 10.2+
  • CLI do Xcode

Primeiro instalação do Node. O Detox roda com versões 8.3 ou superiores, para checar sua versão use o comando:

node -v

Caso não tenha instalado ainda:

brew update && brew install node

Depois instalamos globalmente a CLI do Detox:

npm install -g detox-cli

Agora vamos instalar o applesimutils, que são algumas ferramentas para auxiliar o trabalho com simuladores iOS, o Detox utilizará delas para se comunicar com o emulador:

brew tap wix/brewbrew install applesimutils

ADICIONANDO AO PROJETO

Primeiro adicionamos o detox ao projeto como dependência de desenvolvimento:

yarn add -D detox

Como o Detox não executa propriamente as lógicas dos testes, mas delega essa função, precisamos instalar um test runner, e para isso temos duas opções: Jest ou Mocha. Optamos pelo Jest pois já o utilizamos junto com o Testing Library no projeto. Então instalamos o test runner jest-circus:

yarn add -D jest-circus

Pronto agora já podemos começar a configurar os arquivos do Detox.

CONFIGURANDO O DETOX

Vamos criar a estrutura base dos arquivos com o comando:

detox init -r jest

Esse comando deve criar um arquivo .detoxrc na raiz de seu projeto e uma pasta e2e com os seguintes arquivos:

  • config.json
  • environment.js
  • firstTest.e2e.js

Você pode conferir se os arquivos estão corretos no repositório demo.

Dentro do .detoxrc vamo fazer algumas alterações:

  • binaryPath: esse é o caminho onde será encontrada o arquivo .apk ou .ipa para executar. Mude onde estiver example.app para o nome do seu projeto.
  • build: o caminho para executar o comando build do detox. Troque onde estiver example pelo nome de seu projeto. Caso esteja utilizando pods ou React Native 0.60+ substitua a tag -project por -workspace e .xcodeproj por .xcworkspace.
  • type: o tipo de dispositivo que vai ser utilizado nos testes, deixamos ios.simulator
  • device: por último o dispositivo que vamos utilizar, no iOS passamos o type como iPhone 11 Pro. Configurando um dispositivo Android passaríamos a propriedade com o nome avdName.

Agora vamos executar configurações do nosso Detox, esse processo pode durar alguns minutos:

detox build

Caso você tenha mais de uma configuração, utilize o comando configuration seguido no nome de sua configuração para selecioná-la:

detox build — configuration ios

CRIANDO SEU PRIMEIRO TESTE

No arquivo firstTest.e2e.js vamos escrever nosso primeiro teste. Como é utilizado o jest a sintaxe não será um problema pra quem já está familiarizado com testes unitários em javascript.

Para esse teste criei um componente simples que simula uma validação de formulário de login:

A estrutura do arquivo de testes é composta de um describe para criar uma suíte de testes:

No início adicionamos um beforeEach, que será responsável por recarregar o aplicativo (o comando cmd + r no simulador iOS ou rr no emulador Android) antes da execução de cada cenário:

Depois criamos nossa primeira suíte de testes. Iremos testar a validação do input de senha:

Vamos utilizar o método element junto com o match escolhido para capturar os elementos da tela. Começaremos com o input de email, vamos capturá-lo pelo id, no componente é possível ver uma prop testID com o valor que vamos buscar e salvá-lo em uma variável

Componente
Buscando componente com Detox

Depois vamos buscar nosso botão, para localizá-lo podemos utilizar seu texto:

Componente
Buscando componente com Detox

Agora é a hora de preencher os campos, vamos utilizar a variável que salvamos o component e a action typeText() do Detox:

Com nosso input preenchido é só clicar em no botão, usando a action tap() fazemos isso facilmente:

Importante lembrar que as actions do Detox são assíncronas, ou seja, elas retornam Promises e utilizamos o await para esperar a ação finalizar.

No fim verificamos se a validação ocorreu corretamente buscando um elemento texto na tela:

Pronto agora é só rodar seus testes E2E:

detox test

CONCLUSÃO

O Detox oferece um leque variado de funcionalidades para realizar testes E2E em sua aplicação móvel, com uma documentação bem completa e utilizando uma sintaxe já conhecida para os programadores da área, o tornando uma opção produtiva e poderosa de ferramenta para aumentar ainda mais a cobertura de testes do seu aplicativo.

Abaixo deixo alguns link importantes, nos quais esse texto foi baseado, para quem quiser se aprofundar mais nessa biblioteca:

--

--