fabtec / test-craft
Pacote para facilitar a criação de testes
Requires
- php: ^8.0
- laravel/framework: 10.*
README
Introdução
O TestCraft é um pacote para Laravel que facilita a criação de classes de teste para controllers do tipo resource. Ele inclui um comando de terminal para geração automática de testes e uma classe base que abstrai as operações comuns de testes em controllers resource.
Este pacote foi desenvolvido com o objetivo de:
- Padronizar a escrita de testes em projetos Laravel.
- Agilizar o processo de desenvolvimento, reduzindo a necessidade de criar testes manualmente.
- Aumentar a eficiência no ciclo de desenvolvimento, garantindo que testes essenciais sejam gerados automaticamente.
Instalação
Instale o pacote executando:
composer require fabtec/test-craft --dev
Uso
Comando testcraft:create
O comando principal do pacote é testcraft:create
, que gera uma classe de teste para um controlador resource com base no nome da entidade.
Sintaxe:
php artisan testcraft:create {entity}
Parâmetros:
{entity}
: Nome da entidade relacionada ao controller (exemplo:User
,Product
).
O que o Comando Faz:
-
Valida Requisitos:
- Verifica a existência do modelo:
App\Models\{Entity}
. - Verifica a existência da fábrica:
Database\Factories\{Entity}Factory
. - Verifica a existência do controller:
App\Http\Controllers\{Entity}Controller
. - Verifica se as rotas esperadas do padrão resource estão registradas.
- Verifica a existência do modelo:
-
Gera a Classe de Teste:
- Cria a classe no diretório
tests/Feature/Http/Controllers
. - O nome do arquivo será
{Entity}ControllerTest.php
.
- Cria a classe no diretório
-
Configura os Testes:
- Define a classe do modelo (
$modelClass
). - Define o prefixo de rota (
$routePrefix
). - Inclui métodos para geração de dados utilizados nos testes (
generateData()
).
- Define a classe do modelo (
Classe Base: ResourceControllerTestCase
As classes geradas herdam de ResourceControllerTestCase
, que abstrai as operações comuns de testes em controllers resource.
Atributos Customizáveis
-
$modelClass
:- Define a classe do modelo relacionado ao controller.
- Exemplo:
protected string $modelClass = \App\Models\Product::class;
-
$routePrefix
:- Define o prefixo das rotas relacionadas ao controller.
- Exemplo:
protected string $routePrefix = 'products';
Métodos Customizáveis
-
generateData()
:- Retorna os dados necessários para criar ou atualizar registros nos testes.
- É utilizado nos testes das rotas
store
eupdate
. - Exemplo:
protected function generateData(): array { return [ 'name' => 'Product Test', 'price' => 100.0, ]; }
-
generateCreateData()
egenerateUpdateData()
:- Herdados de
ResourceControllerTestCase
. - Delegam por padrão para
generateData()
mas podem ser sobrescritos para fornecer dados diferentes. - Exemplo:
protected function generateCreateData(): array { return [ 'name' => 'New Product', 'price' => 150.0, ]; }
- Herdados de
Exemplo de Classe Gerada
Abaixo está um exemplo de uma classe de teste gerada para o ProductController
:
namespace Tests\Feature\Http\Controllers; use App\Models\Product; use FabTec\TestCraft\ResourceControllerTestCase; class ProductControllerTest extends ResourceControllerTestCase { /** * {@inheritDoc} */ protected string $modelClass = Product::class; /** * {@inheritDoc} */ protected string $routePrefix = 'products'; /** * {@inheritDoc} */ protected function generateData(): array { return [ 'name' => 'Product Test', 'price' => 100.0, ]; } }
O que esta Classe Faz?
- Testa automaticamente as rotas padrão de controllers resource:
index
: Lista todos os registros.create
: Exibe o formulário de criação.store
: Cria um novo registro.show
: Exibe um registro específico.edit
: Exibe o formulário de edição.update
: Atualiza um registro.destroy
: Exclui um registro.
Contribuição
Para contribuir com o TestCraft, abra um pull request ou reporte problemas no repositório oficial do GitHub.
Autores
- Henrique Borges dos Santos https://github.com/HenriqueBS0
Licença
Este pacote é licenciado sob a MIT License.