Skip to main content

Introduzione

Laravel offre un’API ricca per simulare richieste HTTP e verificarne le risposte. Puoi riprodurre nei test le richieste all’applicazione senza avviare un vero server HTTP.
Il metodo get() invia una richiesta GET all’applicazione e assertStatus() verifica il codice HTTP.
Durante l’esecuzione dei test il middleware CSRF è disabilitato automaticamente. Non è necessario disabilitarlo esplicitamente.

Effettuare richieste

Nei test puoi usare i metodi get, post, put, patch, delete. Non fanno vere richieste di rete, ma simulano internamente. Restituiscono un’istanza di Illuminate\Testing\TestResponse con molti metodi di asserzione.
In un test consigliamo di inviare una sola richiesta. Più richieste nello stesso test possono generare comportamenti inattesi.

Header di richiesta

Con withHeaders() personalizzi gli header.
Con withCookie() o withCookies().

Sessione e autenticazione

Con withSession() imposti dati di sessione.
Con actingAs() esegui come utente autenticato.
Puoi indicare la guard nel secondo argomento.
Per richieste da non autenticato:

Debug delle risposte

Test delle eccezioni

Con la facade Exceptions.
Per verificare che non siano state emesse eccezioni:
Per disabilitare la gestione delle eccezioni:
Per testare eccezioni lanciate da closure:

Test di API JSON

Laravel offre helper per JSON: json, getJson, postJson, putJson, patchJson, deleteJson, optionsJson.
Puoi accedere ai dati JSON come array:
assertJson() verifica che i dati indicati siano contenuti nella risposta JSON. Il test passa anche se la risposta ha proprietà aggiuntive.

Corrispondenza esatta

JSON path

Test JSON fluente

etc() permette la presenza di proprietà non asserite. Senza etc(), se ci sono proprietà non asserite il test fallisce, aiutando a prevenire fughe di dati sensibili nella response.
Per verificare presenza/assenza:

Collection JSON

Per applicare la stessa asserzione a ogni item usa each():

Type assertion

Tipi: string, integer, double, boolean, array, null.

Test di autenticazione

Con guard specifica:

Esempio: registrazione utente

Test di sessione

Elenco delle asserzioni di sessione

Test di upload file

Con UploadedFile::fake() e Storage::fake().
Per verificare l’assenza:

Personalizzare i file finti

Test di viste

Senza simulare la richiesta HTTP puoi renderizzare direttamente la vista.
TestView fornisce: Contenuto come stringa:
Errori di validazione in una vista:

Test di componenti

Elenco delle asserzioni sulle response

Metodi principali della classe Illuminate\Testing\TestResponse.

Status HTTP

Redirect

Contenuto

JSON

Viste

Validazione

Consigli per il TDD

I test HTTP si sposano bene con il TDD. Consigli:
Metti i test HTTP in tests/Feature/. Descrivere il comportamento dall’esterno (richiesta → risposta) chiarisce cosa implementare.
Nei test che usano il DB usa il trait RefreshDatabase. Il DB viene resettato dopo ogni test evitando interferenze.
Con User::factory()->create() crei rapidamente dati di test. Definisci gli stati (state) per test più leggibili.
Verifica una cosa per test per identificare più facilmente la causa dei fallimenti. Segui lo schema AAA (Arrange, Act, Assert).
Per le route protette scrivi sempre sia il caso “autenticato” sia “non autenticato”. Prevengono problemi di sicurezza.

Pagine correlate

Introduzione al testing

Le basi dei test in Laravel e l’uso di php artisan test.
Ultima modifica il 13 luglio 2026