Testes Automatizados - ime-usp-br/laravel_11_starter_kit GitHub Wiki
Testes Automatizados
O Projeto Base USP vem configurado com ferramentas e exemplos para facilitar a escrita e execução de testes automatizados, garantindo a qualidade e a confiabilidade da aplicação.
Ferramentas Utilizadas
- PHPUnit: O framework padrão de testes unitários e de features para PHP e Laravel. Usado para testar unidades de código isoladas (Unit tests) e para testar funcionalidades completas através de requisições HTTP simuladas (Feature tests).
- Laravel Dusk: Um pacote oficial do Laravel para testes de navegador (End-to-End). Ele utiliza um driver ChromeDriver real (ou compatível) para interagir com a aplicação como um usuário faria, testando interfaces e fluxos JavaScript.
- Faker: Biblioteca para gerar dados falsos (nomes, emails, etc.) usada nas Factories para popular o banco de dados em testes.
Configuração do Ambiente de Teste
Ao executar os testes (php artisan test
ou php artisan dusk
), o Laravel automaticamente utiliza as configurações definidas no arquivo .env.testing
(ou .env.dusk.local
para Dusk, que por sua vez carrega .env.testing
). Estas configurações são otimizadas para velocidade e isolamento:
- Banco de Dados: SQLite em memória (
DB_CONNECTION=sqlite
,DB_DATABASE=:memory:
) é o padrão para PHPUnit. Isso cria um banco zerado a cada execução de teste (quando se usa o traitRefreshDatabase
), garantindo isolamento e rapidez. Para Dusk, um arquivo SQLite (database/database.dusk.sqlite
) é usado por padrão para persistir o estado entre as requisições do navegador. - Cache: Driver
array
(em memória). - Sessão: Driver
array
(em memória). - Filas: Driver
sync
(tarefas são executadas imediatamente, sem um worker separado). - Hashing:
BCRYPT_ROUNDS=4
(mais rápido que o padrão de produção). - Email:
MAIL_MAILER=array
(emails são capturados em memória para que se possa fazer asserções sobre eles, em vez de serem enviados). - Serviços Externos: Credenciais para Senha Única e Replicado são definidas com valores dummy. Testes NUNCA DEVEM depender de serviços externos reais. Use Mocks ou Fakes para simular essas interações.
Execução dos Testes
- Todos os Testes PHPUnit (Feature e Unit):
php artisan test
- Testes de Navegador (Laravel Dusk):
- Certifique-se de ter o ChromeDriver apropriado instalado ou use o Laravel Sail. Veja a documentação do Dusk para detalhes da instalação do driver.
- Execute o comando:
Nota: Pode ser necessário rodarphp artisan dusk
php artisan dusk:chrome-driver --detect
na primeira vez ou ao atualizar o Chrome.
Testes Incluídos no Projeto Base
O projeto já vem com um conjunto inicial de testes cobrindo as funcionalidades principais:
- Testes de Feature (
tests/Feature
):Auth/
: Testam os fluxos de Autenticação (login local, registro USP/Externo), Reset de Senha, Confirmação de Senha, Verificação de Email, Senha Local USP.Admin/
: Testam o acesso e as funcionalidades da Área Administrativa (listar usuários, validação dos formulários de criação).Profile/
: Testam a exibição e atualização da página de perfil, incluindo a exclusão da conta.Middleware/
: Testa o comportamento do middlewareEnsureEmailIsVerifiedGlobally
.Database/
: Testa se oRolesAndPermissionsSeeder
funciona corretamente.ExampleTest.php
: Teste básico que verifica se a página inicial carrega.
- Testes de Unit (
tests/Unit
):Notifications/
: Testam o conteúdo e a correta geração das URLs nas notificações customizadas (VerifyUserEmail, SendResetPasswordLink, SendLocalPasswordLink).ExampleTest.php
: Teste unitário básico.
- Testes de Browser (
tests/Browser
):Admin/
: Testam o acesso e as funcionalidades básicas da área administrativa via navegador (Dusk).- Testam os fluxos de Autenticação, Registro, Verificação de Email, Senha Local USP, Reset de Senha e Perfil via navegador (Dusk).
ExampleTest.php
: Teste Dusk básico que visita a página inicial.Pages/
: Contém classes Page Object Model (POM) para abstrair seletores e ações em páginas comuns (ex:HomePage
).
Nota sobre Testes Dusk: O DuskTestCase.php
foi customizado para incluir um método captureBrowserHtml
que, em caso de falha, tenta extrair e imprimir o HTML da seção principal da página (#content
ou div de erro) e a localização da falha no arquivo de teste, facilitando a depuração.
Adicionando Novos Testes
-
Criar Teste de Feature ou Unit:
# Feature Test php artisan make:test NomeDoMeuFeatureTest # Unit Test php artisan make:test NomeDoMeuUnitTest --unit
Coloque os arquivos gerados em
tests/Feature
outests/Unit
, respectivamente. -
Criar Teste de Browser (Dusk):
php artisan dusk:make NomeDoMeuBrowserTest
Coloque o arquivo gerado em
tests/Browser
.
Siga os padrões de escrita de testes do Laravel, utilizando os métodos de asserção disponíveis, factories para criar dados e mocks/fakes para isolar dependências externas. Consulte a documentação de testes do Laravel e a documentação do Dusk.