PHPackages                             fabtec/test-craft - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. fabtec/test-craft

ActiveLibrary

fabtec/test-craft
=================

Pacote para facilitar a criação de testes

v1.0.0(1y ago)025MITPHPPHP ^8.0

Since Nov 16Pushed 1y ago1 watchersCompare

[ Source](https://github.com/fabtec-ifc/TestCraft)[ Packagist](https://packagist.org/packages/fabtec/test-craft)[ RSS](/packages/fabtec-test-craft/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

TestCraft
=========

[](#testcraft)

Introdução
----------

[](#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
----------

[](#instalação)

Instale o pacote executando:

```
composer require fabtec/test-craft --dev
```

---

Uso
---

[](#uso)

### Comando `testcraft:create`

[](#comando-testcraftcreate)

O comando principal do pacote é `testcraft:create`, que gera uma classe de teste para um controlador resource com base no nome da entidade.

#### Sintaxe:

[](#sintaxe)

```
php artisan testcraft:create {entity}
```

#### Parâmetros:

[](#parâmetros)

- **`{entity}`**: Nome da entidade relacionada ao controller (exemplo: `User`, `Product`).

#### O que o Comando Faz:

[](#o-que-o-comando-faz)

1. **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.
2. **Gera a Classe de Teste**:

    - Cria a classe no diretório `tests/Feature/Http/Controllers`.
    - O nome do arquivo será `{Entity}ControllerTest.php`.
3. **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()`).

---

Classe Base: `ResourceControllerTestCase`
-----------------------------------------

[](#classe-base-resourcecontrollertestcase)

As classes geradas herdam de `ResourceControllerTestCase`, que abstrai as operações comuns de testes em controllers resource.

### Atributos Customizáveis

[](#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

[](#métodos-customizáveis)

- **`generateData()`**:

    - Retorna os dados necessários para criar ou atualizar registros nos testes.
    - É utilizado nos testes das rotas `store` e `update`.
    - Exemplo: ```
        protected function generateData(): array
        {
            return [
                'name' => 'Product Test',
                'price' => 100.0,
            ];
        }
        ```
- **`generateCreateData()`** e **`generateUpdateData()`**:

    - 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,
            ];
        }
        ```

---

Exemplo de Classe Gerada
------------------------

[](#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?
----------------------

[](#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
------------

[](#contribuição)

Para contribuir com o **TestCraft**, abra um pull request ou reporte problemas no repositório oficial do GitHub.

---

Autores
-------

[](#autores)

- Henrique Borges dos Santos

---

Licença
-------

[](#licença)

Este pacote é licenciado sob a [MIT License](LICENSE).

---

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance39

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity43

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

546d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/ea33acee27dc080ebe189a335cabddb636cfbaa20f2f436f655d2bd945d9f74c?d=identicon)[fabtec-ifc](/maintainers/fabtec-ifc)

---

Top Contributors

[![HenriqueBS0](https://avatars.githubusercontent.com/u/52547414?v=4)](https://github.com/HenriqueBS0 "HenriqueBS0 (7 commits)")

### Embed Badge

![Health badge](/badges/fabtec-test-craft/health.svg)

```
[![Health](https://phpackages.com/badges/fabtec-test-craft/health.svg)](https://phpackages.com/packages/fabtec-test-craft)
```

###  Alternatives

[anourvalar/eloquent-serialize

Laravel Query Builder (Eloquent) serialization

11320.2M21](/packages/anourvalar-eloquent-serialize)[namu/wirechat

A Laravel Livewire messaging app for teams with private chats and group conversations.

54324.5k](/packages/namu-wirechat)[statamic-rad-pack/runway

Eloquently manage your database models in Statamic.

135192.6k5](/packages/statamic-rad-pack-runway)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
