Testes em Laravel

William Oliveira Lima
5 min readJan 28, 2020

--

Considerando que já tenha conhecido o Laravel, podemos começar.

Uma proposta que influencia nós desenvolvedores à resolver problemas antecipadamente, ou dentre a finalização de processos de desenvolvimento, é o que o vemos sobre testes. Objetividade e confidencialidade, são primordiais para uma aplicação, e de acordo com que a estrutura é desenvolvida, ela precisa ser testada, colocando em ordem suas prioridades, para que nada seja perdido, ou refeito.

O PHPUnit é um framework que carrega alguns métodos de pesquisa, como por exemplo o composer, que fornece um padrão de gerenciamento para dependências do software em desenvolvimento e bibliotecas necessárias. Esse pacote já está vinculado ao Laravel. Nos seus diretórios, encontra-se um arquivo phpunit.xml, que fornece métodos para testes em nossos aplicativos.

O desenvolvedor pode estar precisando testar algo simples no seu código. Pode ser uma funcionalidade separada, quando acontece alguma modificação em uma parte isolada. Ou pode estar precisando de um teste mais robusto, sobre um recurso mais abrangente, por exemplo, algumas que fazem requisições durante a aplicação. Por isso, existem dois tipos de testes que são separados por padrão na pasta tests, e são: Unit e Feature.

No exemplo acima, podemos conferir um teste para um e-mail, utilizando o pacote Composer. Este é um teste utilizando Features, então possui relacionamentos e requisições.

Já neste passo, vemos um teste básico de acerto, com Unit.

A resposta dos dois código precisa ser positiva para que não haja erro. Se houver algo que comprometa as regras ditadas na solução dos métodos, o sistema acusa.

Como somos ótimos programadores, nosso resultado sempre será: OK.

Após instalada a aplicação Laravel, deve se dirigir aos diretórios e executar o phpunit com o teste.

Quando acionada, o recurso PHPUnit cria um ambiente de “testing” variáveis, que são armazenadas em cache, e por isso, nenhum dado da sessão é mantido durante o teste. O ambiente pode ser tratado no arquivo phpunit.xml, mas querer cuidados. Antes de iniciar seu teste, limpe o cache com o comando Artisan: phpunit.xml config:clear.

Temos a opção de substituir o arquivo principal por um criado por você, então sempre que fizer testes, o sistema troca o original pelo seu, e os testes são feitos em cima de suas variáveis. Utilizando env.testing.env --env=testing.

Utilizando o Artisan podemos criar um testes à partir do comando php artisan make:test UserTest, este para o tipo Feature, e php artisan make:test UserTest --unit, para Unit.

Então, é preciso definir seus métodos no código de testes, mapeado corretamente, utilizando o comando phpunit no seu terminal.

No desenvolvimento do código de testes, o primeiro a ser comentado é o HTTP, que faz a troca de informações entre a aplicação e a base de dados. Podendo assim, solicitar a saída que o sistema retornará para o teste. Esse recurso permite que você otimize seu código de testes. Neste caso, podemos analisar cabeçalhos, primeiramente, ou mapear uma base de dados local, ou não, para receber um JSON e interagir com seus títulos, podendo fazer buscas por palavras chave, ou criando um storage para substituir seu atual com métodos como: Storage::fake('avatars').O HTTP tem essa função de conversar para os documentos.

Os testes no console são aqueles que aguardam uma resposta do usuário, então o Laravel traz um conjunto de métodos que constroem uma máscara para as entradas no sistema. É definido um conjunto de possíveis respostas que são capturadas pelos métodos: assertExitCode, expectQuestione expectsOutput. Podemos assim direcionar as respostas para saber se tudo está funcionando bem.

Podemos também fazer testes à partir de navegadores usando Laravel Dusk. Esse recurso fornece uma API de teste e automação de navegador expressiva e fácil de usar. Por padrão, o Dusk não exige a instalação do JDK ou Selenium em sua máquina. Ele utiliza de um driver e sua instalação é feita de forma autônoma.

O Laravel provém testes adequados também para sistemas que possuem banco de dados. Foram separados recursos que possam interagir com os dados e filtrar informações de modo que conseguimos usar essa interação para um objetivo maior com os dados. Um exemplo prático de buscar um registro no banco de dados, cujo e-mail seja: sally@example.com.

Nessa etapa, o Artisan também tem muita importância. É ele quem vai criar o que o Laravel chama de Fábrica. Então, à partir disso, você tem um ambiente do seu diretório. php artisan make:factory PostFactory é o comando para abrir uma fábrica. Nela você pode definir suas regras nos métodos e capturar dados para usar. Cada fábrica pode dar retornos, de acordo com o código.

Por exemplo, você pode usar retornos de chamada para relacionar modelos adicionais ao modelo criado:

Utilizando afterMaking e afterCreating para criar alterações ou processo após ou, criar outro processo intermediário.

Com um sistema já estruturado, o Laravel traz uma performance chamada de Moking, que significa “zombar” em português. Esse recurso permite que criemos ouvintes e não-ouvintes para testar nossa aplicação. Se for preciso isolar respostas de requisições HTTP, por exemplo. Um cenário de testes é divido em casos de testes, e cada caso pode ser isolado na hora dos testes. Dessa forma conseguimos fazer um objeto ser criado em outra instancia temporária, antes de ser criado na original.

Para um sistema com funcionalidades complexas, ou não, é sempre necessário fazer testes durante seu desenvolvimento. Os testes podem prever problemas grandes de incompatibilidade e colisões de informações. O Laravel trouxe desde o inicio de sua implantação, recursos de teste que nos permitem checar muitos gatilhos da nossa aplicação. A metodologia de aplicação para testes é feito por cenários e etapas. Para cada funcionalidades podemos prever algumas reações e trata-las de forma agradável para o sistema.

www.laravel.com

Para escrever este artigo, utilizei informações contidas na documentação do Laravel.

Também mantive pesquisa em sites externos como: https://www.cloudways.com/blog/laravel-unit-testing/; https://homepages.dcc.ufmg.br/~mirella/doku.php?id=escrita&fbclid=IwAR1_jILIFlh56M1fyqJQoTkkNlnuQNIOiR6IsNRUiBGqWbmZmIgd7xuTx4Q; https://www.devmedia.com.br/laravel-tutorial/33173.

--

--