GlosarioTesting

¿Qué es Pest?

Pest es un framework de testing elegante para PHP y Laravel que ofrece una sintaxis expresiva y minimalista inspirada en Jest, con soporte para arquitectura de tests, cobertura de codigo y ejecucion en paralelo.

Pest

Pest es un framework de testing para PHP con una sintaxis elegante y minimalista. Es la opcion recomendada para testing en Laravel y viene preconfigurado en las nuevas instalaciones.

Sintaxis basica

// tests/Feature/PostTest.php
use App\Models\Post;
use App\Models\User;

it('muestra la lista de posts', function () {
    $posts = Post::factory(3)->create();

    $this->get('/posts')
        ->assertOk()
        ->assertSee($posts->first()->title);
});

it('permite crear un post a usuarios autenticados', function () {
    $user = User::factory()->create();

    $this->actingAs($user)
        ->post('/posts', [
            'title' => 'Mi nuevo post',
            'body' => 'Contenido del post',
        ])
        ->assertRedirect('/posts');

    $this->assertDatabaseHas('posts', ['title' => 'Mi nuevo post']);
});

it('no permite editar posts ajenos', function () {
    $post = Post::factory()->create();
    $otherUser = User::factory()->create();

    $this->actingAs($otherUser)
        ->put("/posts/{$post->id}", ['title' => 'Hackeado'])
        ->assertForbidden();
});

Arch testing (tests de arquitectura)

arch('los modelos extienden Model')
    ->expect('App\Models')
    ->toExtend('Illuminate\Database\Eloquent\Model');

arch('no se usa dd() en produccion')
    ->expect(['dd', 'dump', 'ray'])
    ->not->toBeUsed();

Ejecutar tests

php artisan test                    # Ejecutar todos
php artisan test --filter=PostTest  # Filtrar
php artisan test --parallel         # En paralelo
php artisan test --coverage         # Con cobertura

Pest es compatible con PHPUnit, por lo que puedes usar ambos en el mismo proyecto. Su sintaxis concisa reduce significativamente el boilerplate en los tests.