Skip to main content

Perché Pest è diventato il default di Laravel

Da Laravel 11 in poi, quando crei un progetto con laravel new, Pest viene selezionato come framework di test predefinito. PHPUnit è stato per anni lo strumento standard per i test PHP, ma Pest si basa su PHPUnit offrendo una scrittura di test più concisa e leggibile.
Pest funziona sopra PHPUnit, quindi i test PHPUnit esistenti si eseguono così come sono. La migrazione può procedere gradualmente.
Dietro l’adozione ufficiale di Pest c’è l’obiettivo di ridurre l’attrito nello scrivere test. Eliminando la procedura rituale di definire una classe e scrivere un metodo, e fornendo una scrittura che permette di concentrarsi su “ciò che vogliamo testare”, diventa naturale acquisire l’abitudine di scrivere test.

Differenze principali rispetto a PHPUnit

Scrittura del test

La differenza più evidente è il modo in cui si scrivono i test.
La funzione test() di Pest riceve una closure. Non serve definire classi o metodi e l’intento del test è chiaro fin dalla prima riga. Si può usare anche it(). In inglese si legge come una frase naturale: it('can login', ...).

API expect()

Il tratto distintivo di Pest sono le asserzioni in stile chain con expect().
expect($value)->toBe(), ->toBeNull(), ->toContain(), ->toHaveCount() e simili permettono di scrivere asserzioni che si leggono in modo naturale. Puoi anche concatenare più asserzioni.

Setup e teardown

Il corrispondente di setUp() di PHPUnit è beforeEach(), quello di tearDown() è afterEach().

Dataset — test table-driven

Se vuoi eseguire la stessa logica di test su più dati, usa dataset.
Le label di ciascun dataset ('nessuna email', ecc.) vengono aggiunte al nome del test, così vedi a colpo d’occhio quale caso è fallito.

Test arch() — verifica automatica dell’architettura

arch() di Pest è un test che verifica la struttura della codebase. Puoi verificare automaticamente regole architetturali come “il controller non dipende direttamente dal modello” o “il modello estende Eloquent”.
I test arch() vengono eseguiti effettuando analisi statica del codice sorgente. Non inviano richieste HTTP né accedono al database, quindi sono estremamente veloci.
Pest include anche preset di regole architetturali comunemente usate.
Il preset laravel() verifica insieme regole conformi alle convenzioni tipiche di Laravel come naming dei modelli, ereditarietà dei controller e struttura dei middleware.

Esempi pratici in un progetto Laravel

Creazione del test

Da Laravel 11 in poi, con la configurazione predefinita, viene generato un file di test in formato Pest.

Usare gli helper di test di Laravel senza modifiche

Pest eredita il TestCase di Laravel, quindi puoi usare così come sono tutti gli helper di test di Laravel come actingAs(), assertDatabaseHas() e gli helper di test HTTP.

Factory e transazioni database

Anche i trait RefreshDatabase o DatabaseTransactions si applicano facilmente con uses(). Scritto in cima al file si applica all’intero file.
Impostandolo una volta in tests/Pest.php, RefreshDatabase viene abilitato automaticamente per tutti i test Feature. Puoi anche sovrascriverlo nel singolo file di test.

Come convivere con i test PHPUnit esistenti

Pest e PHPUnit possono convivere nello stesso progetto. Non è necessario riscrivere i test PHPUnit esistenti: basta iniziare a scrivere i nuovi test in stile Pest.
Da Laravel 11 in poi, php artisan test usa automaticamente Pest se installato.

Come procedere con la migrazione

  1. Aggiungi prima la configurazione di uses() in tests/Pest.php
  2. Scrivi i nuovi test in stile Pest
  3. Migra gradualmente i test PHPUnit esistenti verificando il funzionamento
Non serve riscrivere tutti i test in fretta. La sintassi di Pest ha un costo di apprendimento inferiore rispetto a PHPUnit, quindi anche l’adozione da parte del team è relativamente fluida.

Conclusioni

Pest non è una sostituzione di PHPUnit, ma un layer superiore che lo avvolge. Ha un’integrazione profonda con Laravel, al punto da essere selezionato di default dallo starter kit. Il costo di introduzione nei progetti esistenti è basso e basta iniziare dai nuovi test per beneficiarne. Aumentando la quantità di test scritti, si scoprono prima i bug e cala la barriera psicologica verso il refactoring. Pest è lo strumento che riduce “l’attrito stesso dello scrivere test”.

Documentazione ufficiale di Pest

Per tutte le funzionalità di Pest come dataset, coverage ed esecuzione parallela, consulta la documentazione ufficiale.
Ultima modifica il 13 luglio 2026