Controller
Testano i metodi del controller, indipendentemente dal fatto che vengano chiamati o meno dal frontend. In particolare si dedicano a testare il:
- Rendering dei template:
expect(response).to render_template(:new)
- Redirects:
expect(response).to redirect_to(location)
- Varaibili di istanza: verificare che il controller fornisca la variabile
@foo
correttaexpect(assigns(:foo)).to eq([foo]
- Cookie: inviati alla risposta
- Codice http di risposta:
expect(response).to have_http_status(:created)
Render_template
Disponbile in:
- controller
- request
Redirect_to
Disponbile in:
- controller
- request
have_http_status
Disponbile in:
- controller
- request
- feature
be_a_new
Accetta in ingresso una classe e fornisce ok se il soggetto è una istanza di tale classe. Posso concatenare anche il metodo with
con il be_a_new
per controllare gli attributi di tale classe.
Nota bene che funziona con un oggetto che è una nuova istanza di classe (Foo.ne
w) e non con un oggetto già creato (Foo.create
)
Request
Utili per testare un intero comportamento (routing e controller). Posso testare:
- Singola richiesta
- Multiple richieste su più controller
- Multiple richieste su più sessioni
Se si utilizzano i test di controller e ri route può non servire.
Feature
Specificano test ad alto livello per testare una intera funzionalità di un applicativo. Navigano l’applicazione da pagine web (utilizzando capybara). L’oggetto feature corrisponde al describe, lo scenario all’it. Classi comode
Navigazione
visit
Naviga in una pagina web (solo un parametro in ingresso, solo GET)
current_path
Fornisce il path attuale.
Cliccare link e bottoni
Capybara automaticamente segue il link, i redirect e submitta i form.
Interagire con i form
Verificare l’esistenza di elementi
Trovare un elemento
Ho numerodi modi per trovare elementi nella pagina per manipolarli (i metodi find aspettano che l’elemento compaia nella pagina (aspettando conseguentmente tutte le chiamate AJAX), se l’elemento non appare lancia un errore).
Gli oggetti che vengono trovati con il find
possono essere poi concatenati ad altri metodi capybara:
Scoping
Volendo testare solo una determinata sezione di una pagina, posso utilizzare il metodo within
che accetta in ingresso un selettore CSS nel seguente modo:
Lavorare con le finestre
Talvolta il click dei pulsanti crea delle nuove finestre (per esempio il log in con facebook), che capybara dovrebbe gestire. Assumiamo che ho il pulsante like di facebook che mi apre una nuova finestra. Il test avverrà nel seguente modo:
Debugging
E’ possibile fare degli snapshot delle pagine elaborate da capybara per poterle guardare e trovare eventuali errori.
save_and_open_page
: Apri la pagina correnteprint page.html
: Fornisce la string del DOM attualepage.save_screenshot('screenshot.png')
: salva uno screenshot della paginasave_and_open_screenshot
: salva lo screenshot e lo apre
View
Tendenzialmente inutili