Pular para o conteúdo
Skillpedia
Testes280 mil · #76

laravel-tdd

Faz seu agente escrever testes para aplicações Laravel de forma eficiente. Utiliza ferramentas como PHPUnit e Pest para garantir a qualidade e a confiabilidade do código.

O que ela faz

Esta ferramenta ajuda a criar testes automáticos para seu código Laravel. Ela garante que seu aplicativo funcione como esperado e ajuda a encontrar erros rapidamente.

Quando usar

  • ✓Ao criar novas partes do seu aplicativo Laravel.
  • ✓Ao adicionar novas funcionalidades ao seu aplicativo.
  • ✓Quando você quer ter certeza de que seu código não quebrou algo antigo.

Exemplo do que pedir para a IA

“Crie um teste para garantir que um novo usuário possa ser criado.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/laravel-tdd/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/laravel-tdd/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Você escreve um teste que falha primeiro, depois escreve o código para fazer o teste passar. Por fim, você melhora o código sem quebrar o teste.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill laravel-tdd

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/laravel-tdd/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Testes no Laravel com TDD

Desenvolvimento guiado por testes para aplicações Laravel usando PHPUnit, Pest, factories do Laravel e helpers de teste.

Quando Ativar

  • Escrevendo novas aplicações ou funcionalidades no Laravel
  • Implementando endpoints de API com autenticação Sanctum ou Passport
  • Testando modelos Eloquent, relacionamentos, scopes e accessors
  • Configurando infraestrutura de testes para projetos Laravel
  • Escrevendo testes de funcionalidade para controllers HTTP e requisições de formulário
  • Simulando serviços externos (filas, e-mail, notificações, HTTP)

Fluxo de Trabalho TDD para Laravel

Ciclo Vermelho-Verde-Refatorar

// Step 1: RED — Write a failing test
public function test_a_product_can_be_created(): void
{
    $product = Product::factory()->create(['name' => 'Test Product']);
    $this->assertDatabaseHas('products', ['name' => 'Test Product']);
}

// Step 2: GREEN — Write the migration, model, and factory
// Step 3: REFACTOR — Improve while keeping tests green

Configuração

Configuração do PHPUnit

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
         bootstrap="vendor/autoload.php"
         colors="true">
    <testsuites>
        <testsuite name="Unit">
            <directory suffix="Test.php">tests/Unit</directory>
        </testsuite>
        <testsuite name="Feature">
            <directory suffix="Test.php">tests/Feature</directory>
        </testsuite>
    </testsuites>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="BCRYPT_ROUNDS" value="4"/>
        <env name="CACHE_STORE" value="array"/>
        <env name="DB_CONNECTION" value="sqlite"/>
        <env name="DB_DATABASE" value=":memory:"/>
        <env name="MAIL_MAILER" value="array"/>
        <env name="QUEUE_CONNECTION" value="sync"/>
        <env name="SESSION_DRIVER" value="array"/>
    </php>
</phpunit>

Configuração do TestCase Base

namespace Tests;

use Illuminate\Foundation\Testing\TestCase as BaseTestCase;

abstract class TestCase extends BaseTestCase
{
    protected function setUp(): void
    {
        parent::setUp();
        // Call $this->withoutExceptionHandling() only in tests that
        // test non-HTTP exceptions; it suppresses assertStatus() etc.
    }

    // Helper: Authenticate and return user
    protected function actingAsUser(): mixed
    {
        $user = \App\Models\User::factory()->create();
        $this->actingAs($user);
        return $user;
    }

    protected function actingAsAdmin(): mixed
    {
        $admin = \App\Models\User::factory()->admin()->create();
        $this->actingAs($admin);
        return $admin;
    }
}

Factories de Modelos

// database/factories/UserFactory.php
class UserFactory extends Factory
{
    protected static ?string $password = null;

    public function definition(): array
    {
        return [
            'name' => fake()->name(),
            'email' => fake()->unique()->safeEmail(),
            'email_verified_at' => now(),
            'password' => static::$password ??= Hash::make('password'),
            'remember_token' => Str::random(10),
            'role' => 'user',
        ];
    }

    public function admin(): static
    {
        return $this->state(fn (array $attributes) => ['role' => 'admin']);
    }

    public function unverified(): static
    {
        return $this->state(fn (array $attributes) => ['email_verified_at' => null]);
    }
}

// database/factories/ProductFactory.php
class ProductFactory extends Factory
{
    public function definition(): array
    {
        return [
            'name' => fake()->unique()->words(3, true),
            'slug' => fn (array $attrs) => Str::slug($attrs['name']),
            'description' => fake()->paragraph(),
            'price' => fake()->numberBetween(100, 100000),
            'stock' => fake()->numberBetween(0, 100),
            'is_active' => true,
            'user_id' => UserFactory::new(),
        ];
    }

    public function outOfStock(): static
    {
        return $this->state(fn (array $attributes) => ['stock' => 0]);
    }
}

Usando Factories

$user = User::factory()->create();
$admin = User::factory()->admin()->create();
$product = Product::factory()->create(['user_id' => $user->id]);
$products = Product::factory()->count(10)->create();
$draft = Product::factory()->make(); // Não persistido

// Com relacionamentos

…
Perguntas frequentes

O que é TDD?

TDD significa 'Test-Driven Development' (Desenvolvimento Guiado por Testes). É uma forma de programar onde você escreve testes antes de escrever o código real.

O que são 'model factories'?

São como modelos pré-fabricados para criar dados de teste para seus modelos de banco de dados, facilitando a criação de exemplos para seus testes.

O que é PHPUnit ou Pest?

São ferramentas populares em PHP para escrever e executar testes automatizados.

Detalhes

Descrição original do autor

Laravel testing strategies with PHPUnit, Pest, model factories, HTTP tests, Sanctum authentication testing, mocking, and coverage. Use when writing Laravel tests with PHPUnit or Pest, or driving a Laravel feature test-first.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#76
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas