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.